Beispiel #1
0
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;
}
Beispiel #2
0
/* 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();
}
Beispiel #4
0
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;
}
Beispiel #6
0
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;
    }
}