INT32 SSL_CloseSocket( SOCK_SOCKET socket ) { NATIVE_PROFILE_PAL_COM(); INT32 ret = 0; INT32 socketIndex = -1; GLOBAL_LOCK_SOCKETS(x); void *sslData = g_Sockets_Driver.GetSocketSslData(socket, socketIndex); if((sslData != NULL) && (socketIndex != -1)) { g_Sockets_Driver.SetSocketSslData(socket, NULL); g_Sockets_Driver.UnregisterSocket( socketIndex ); ret = secure_closesocket( socket, (sslData == (void*)SSL_SOCKET_ATTEMPTED_CONNECT ? NULL : sslData) ); HAL_SOCK_SignalSocketThread(); } else // ssl connect never opened or failed to connect (no error) { SOCK_close(socket); } return ret; }
/* TODO: fix me */ int release_socket(int s) { struct SocketSettings *lss; /* TODO: Finish me */ /* dup the socket first, since for AmiTCP, we can only release once */ int s2 = dup(s); /*StdFileDes *fp = _lx_fhfromfd(s);*/ int rc = -1; if (s2 >= 0) { switch (lss=_lx_get_socket_settings(),lss->lx_network_type) { case LX_AS225: rc = (int)SOCK_release(s2); SOCK_close(s2); break; case LX_AMITCP: rc = TCP_ReleaseSocket(s2, -1); TCP_CloseSocket(s2); break; default: /* silence compiler */ break; } } return rc; }
HRESULT Library_spot_net_native_Microsoft_SPOT_Net_SocketNative::close___STATIC__I4__OBJECT( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_NETWORK(); TINYCLR_HEADER(); CLR_INT32 handle, ret; CLR_RT_HeapBlock* socket = stack.Arg0().Dereference(); FAULT_ON_NULL(socket); handle = socket[ FIELD__m_Handle ].NumericByRef().s4; ret = SOCK_close( handle ); //If a socket gets closed, we need to make sure to wake up any threads that are waiting on it. Events_Set( SYSTEM_EVENT_FLAG_SOCKET ); stack.SetResult_I4( ret ); TINYCLR_NOCLEANUP(); }
static int _sock_close(StdFileDes *fp) { struct SocketSettings *lss; int rc; switch (lss=_lx_get_socket_settings(),lss->lx_network_type) { case LX_AS225: rc = SOCK_close(fp->lx_sock); break; case LX_AMITCP: rc = TCP_CloseSocket(fp->lx_sock); break; default: rc = 0; break; } return rc; }
INT32 SNTPClient::Connect() { SOCK_SOCKET timeSocket = SOCK_SOCKET_ERROR; INT32 sockErr = 0; UINT32 usedServer = 0; // look up outstdanding queries for this set of servers OutstandingQuery* query = FindOutstandingConnection(m_ipAddressPrimary, m_ipAddressAlternate); if(query != NULL) { // // signal failed queries // if(query->IsOld()) { query->Dispose(); query = NULL; } else { // // resume old connection // timeSocket = query->GetSocket(); } } if(timeSocket == SOCK_SOCKET_ERROR) { // // new connection // timeSocket = SOCK_socket(SOCK_AF_INET, SOCK_SOCK_DGRAM, SOCK_IPPROTO_UDP); if(timeSocket == SOCK_SOCKET_ERROR) { sockErr = SOCK_getlasterror(); return (sockErr == 0 ? HAL_TIMESERVICE_ERROR : sockErr); } SOCK_sockaddr addr; SOCK_sockaddr_in* dst = (SOCK_sockaddr_in*)&addr; memset(dst, 0, sizeof(SOCK_sockaddr_in)); dst->sin_family = SOCK_AF_INET; dst->sin_port = SOCK_htons(123); dst->sin_addr.S_un.S_addr = SOCK_htonl(m_ipAddressPrimary); usedServer = m_ipAddressPrimary; if(SOCK_connect(timeSocket, &addr, sizeof(addr)) == SOCK_SOCKET_ERROR && SOCK_getlasterror() != SOCK_EWOULDBLOCK) { if(m_ipAddressAlternate != 0) { usedServer = m_ipAddressAlternate; dst->sin_addr.S_un.S_addr = SOCK_htonl(m_ipAddressAlternate); if(SOCK_connect(timeSocket, &addr, sizeof(addr)) == SOCK_SOCKET_ERROR && SOCK_getlasterror() != SOCK_EWOULDBLOCK) { sockErr = SOCK_getlasterror(); SOCK_close(timeSocket); return (sockErr == 0 ? HAL_TIMESERVICE_ERROR : sockErr); } } else { sockErr = SOCK_getlasterror(); SOCK_close(timeSocket); return (sockErr == 0 ? HAL_TIMESERVICE_ERROR : sockErr); } } Initialize(); int sent = SOCK_send(timeSocket, (char*)SNTPData, sizeof(SNTPData), 0); if(sent != sizeof(SNTPData)) { sockErr = SOCK_getlasterror(); SOCK_close(timeSocket); return (sockErr == 0 ? HAL_TIMESERVICE_ERROR : sockErr); } } // retry 10 times every time we stop by INT32 retry = 10; INT32 bytesToRead = c_SNTPDataLength; char* buf = (char*)SNTPData; while(retry-- > 0) { int read = SOCK_recv(timeSocket, buf, bytesToRead, 0); if(read < 0 && (sockErr = SOCK_getlasterror()) != SOCK_EWOULDBLOCK) { SOCK_close(timeSocket); return (sockErr == 0 ? HAL_TIMESERVICE_ERROR : sockErr); } else if(read > 0) { bytesToRead -= read; if(bytesToRead <= 0) { break; } buf += read; // incase we start receiving data towards the end // of the retry limit. retry++; } } // if we could not finish reading, then cache and retry later // if we read a part of answer, then declare failure // in the future we could try and cope with this problem if(bytesToRead == c_SNTPDataLength) { // // if this is a new connection, get a slot // if(query == NULL) { query = GetQuery(usedServer, timeSocket); } return HAL_TIMESERVICE_WANT_READ_WRITE; } else if(bytesToRead > 0 && bytesToRead < c_SNTPDataLength) { if(query != NULL) query->Dispose(); return HAL_TIMESERVICE_WANT_READ_WRITE; } else { if(query != NULL) { query->Dispose(); query = NULL; } else { if( timeSocket != SOCK_SOCKET_ERROR ) { SOCK_close(timeSocket); timeSocket = SOCK_SOCKET_ERROR; } } } DestinationTimestamp = Time_GetUtcTime(); if( !IsResponseValid() ) { if(query != NULL) { query->Dispose(); query = NULL; } else { if( timeSocket != SOCK_SOCKET_ERROR ) { SOCK_close(timeSocket); timeSocket = SOCK_SOCKET_ERROR; } } return HAL_TIMESERVICE_ERROR; } return HAL_TIMESERVICE_SUCCESS; }
void TalkbackCore::deinitRtspInfo() { //fix me if(m_pRtspInfo!=NULL){ //close rtspSocket //delete sdp; //delete auth //delete pRtcp_video //delete pRtcp_audio //delete pRtp_video //delete pRtp_audio //close pSocketGroup //delete pSocketGroup //delete m_pRtspInfo if(m_pRtspInfo->rtspSocket!=-1){ SOCK_close(m_pRtspInfo->rtspSocket); m_pRtspInfo->rtspSocket=-1; } if(m_pRtspInfo->sdp!=NULL){ SDP_cleanup(m_pRtspInfo->sdp); m_pRtspInfo->sdp=NULL; } if(m_pRtspInfo->auth!=NULL){ HTTP_AUTH_destroy(m_pRtspInfo->auth); m_pRtspInfo->auth=NULL; } if(m_pRtspInfo->pSocketGroup!=NULL){ if(m_pRtspInfo->pSocketGroup->rtcp_socket!=-1){ SOCK_close(m_pRtspInfo->pSocketGroup->rtcp_socket); m_pRtspInfo->pSocketGroup->rtcp_socket=-1; } if(m_pRtspInfo->pSocketGroup->rtp_socket!=-1){ SOCK_close(m_pRtspInfo->pSocketGroup->rtp_socket); m_pRtspInfo->pSocketGroup->rtp_socket=-1; } delete m_pRtspInfo->pSocketGroup; m_pRtspInfo->pSocketGroup=NULL; } if(NULL!=m_pRtspInfo->pRtcp_audio){ m_pRtspInfo->pRtcp_audio->deinit(); delete m_pRtspInfo->pRtcp_audio; m_pRtspInfo->pRtcp_audio=NULL; } if(NULL!=m_pRtspInfo->pRtcp_video){ m_pRtspInfo->pRtcp_video->deinit(); delete m_pRtspInfo->pRtcp_video; m_pRtspInfo->pRtcp_video=NULL; } if(NULL!=m_pRtspInfo->pRtp_audio){ m_pRtspInfo->pRtp_audio->deinit(); delete m_pRtspInfo->pRtp_audio; m_pRtspInfo->pRtp_audio=NULL; } if(NULL!=m_pRtspInfo->pRtp_video){ m_pRtspInfo->pRtp_video->deinit(); delete m_pRtspInfo->pRtp_video; m_pRtspInfo->pRtp_video=NULL; } delete m_pRtspInfo; m_pRtspInfo=NULL; } }