调用路线
UDT::socket()->CUDT::socket()->CUDTUnited::newSocket()
1 | UDTSOCKET CUDT::socket( int af, int type, int ) |
6 | if (!s_UDTUnited.m_bGCStatus) |
12 | return s_UDTUnited.newSocket(af, type); |
14 | catch (CUDTException& e) |
16 | s_UDTUnited.setError( new CUDTException(e)); |
21 | s_UDTUnited.setError( new CUDTException(3, 2, 0)); |
26 | s_UDTUnited.setError( new CUDTException(-1, 0, 0)); |
1 | UDTSOCKET CUDTUnited::newSocket( const int & af, const int & type) |
5 | if ((type != SOCK_STREAM) && (type != SOCK_DGRAM)) |
6 | throw CUDTException(5, 3, 0); |
17 | ns->m_pUDT = new CUDT; |
22 | ns->m_pSelfAddr = (sockaddr*)( new sockaddr_in); |
23 | ((sockaddr_in*)(ns->m_pSelfAddr))->sin_port = 0; |
27 | ns->m_pSelfAddr = (sockaddr*)( new sockaddr_in6); |
28 | ((sockaddr_in6*)(ns->m_pSelfAddr))->sin6_port = 0; |
34 | throw CUDTException(3, 2, 0); |
38 | CGuard::enterCS(m_IDLock); |
39 | ns->m_SocketID = -- m_SocketID; |
40 | CGuard::leaveCS(m_IDLock); |
45 | ns->m_ListenSocket = 0; |
47 | ns->m_pUDT->m_SocketID = ns->m_SocketID; |
49 | ns->m_pUDT->m_iSockType = (SOCK_STREAM == type) ? UDT_STREAM : UDT_DGRAM; |
51 | ns->m_pUDT->m_iIPversion = ns->m_iIPversion = af; |
53 | ns->m_pUDT->m_pCache = m_pCache; |
59 | CGuard::enterCS(m_ControlLock); |
62 | m_Sockets[ns->m_SocketID] = ns; |
70 | CGuard::leaveCS(m_ControlLock); |
74 | throw CUDTException(3, 2, 0); |
77 | return ns->m_SocketID; |