Changeset 8370 for trunk/src/ws2_32/socket.cpp
- Timestamp:
- May 6, 2002, 11:38:52 AM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ws2_32/socket.cpp
r8051 r8370 1 /* $Id: socket.cpp,v 1.1 2 2002-03-08 11:36:11sandervl Exp $ */1 /* $Id: socket.cpp,v 1.13 2002-05-06 09:38:52 sandervl Exp $ */ 2 2 /* 3 3 * based on Windows Sockets 1.1 specs … … 105 105 return ( socket (af, type, protocol) ); 106 106 } 107 /*********************************************************************** 108 * WSAAccept (WS2_32.26) 109 */ 110 SOCKET WINAPI WSAAccept( SOCKET s, struct WS_sockaddr *addr, LPINT addrlen, 111 LPCONDITIONPROC lpfnCondition, DWORD dwCallbackData) 112 { 113 114 int ret = 0, size = 0; 115 WSABUF CallerId, CallerData, CalleeId, CalleeData; 116 /* QOS SQOS, GQOS; */ 117 GROUP g; 118 SOCKET cs; 119 SOCKADDR src_addr, dst_addr; 120 121 TRACE("Socket %u, sockaddr %p, addrlen %p, fnCondition %p, dwCallbackData %ld\n", 122 s, addr, addrlen, lpfnCondition, dwCallbackData); 123 124 125 size = sizeof(src_addr); 126 cs = accept(s, &src_addr, &size); 127 128 if (cs == SOCKET_ERROR) return SOCKET_ERROR; 129 130 CallerId.buf = (char *)&src_addr; 131 CallerId.len = sizeof(src_addr); 132 133 CallerData.buf = NULL; 134 CallerData.len = (ULONG)NULL; 135 136 getsockname(cs, &dst_addr, &size); 137 138 CalleeId.buf = (char *)&dst_addr; 139 CalleeId.len = sizeof(dst_addr); 140 141 ret = (*lpfnCondition)(&CallerId, &CallerData, NULL, NULL, 142 &CalleeId, &CalleeData, &g, dwCallbackData); 143 144 switch (ret) 145 { 146 case CF_ACCEPT: 147 if (addr && addrlen) 148 addr = (struct WS_sockaddr *)memcpy(addr, &src_addr, (*addrlen > size) ? size : *addrlen ); 149 return cs; 150 case CF_DEFER: 151 SetLastError(WSATRY_AGAIN); 152 return SOCKET_ERROR; 153 case CF_REJECT: 154 closesocket(cs); 155 SetLastError(WSAECONNREFUSED); 156 return SOCKET_ERROR; 157 default: 158 FIXME("Unknown return type from Condition function\n"); 159 SetLastError(WSAENOTSOCK); 160 return SOCKET_ERROR; 161 } 162 163 SetLastError(WSAENOTSOCK); 164 return SOCKET_ERROR; 165 } 107 166 //****************************************************************************** 108 167 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.