Changeset 3051
- Timestamp:
- Jan 8, 2010 1:08:05 PM (13 years ago)
- Location:
- pjproject/trunk/pjlib/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib/src/pj/ioqueue_winnt.c
r2947 r3051 168 168 * Process the socket when the overlapped accept() completed. 169 169 */ 170 static void ioqueue_on_accept_complete(ioqueue_accept_rec *accept_overlapped) 170 static void ioqueue_on_accept_complete(pj_ioqueue_key_t *key, 171 ioqueue_accept_rec *accept_overlapped) 171 172 { 172 173 struct sockaddr *local; 173 174 struct sockaddr *remote; 174 175 int locallen, remotelen; 176 pj_status_t status; 175 177 176 178 PJ_CHECK_STACK(); 179 180 /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket 181 * addresses can be obtained with getsockname() and getpeername(). 182 */ 183 status = setsockopt(accept_overlapped->newsock, SOL_SOCKET, 184 SO_UPDATE_ACCEPT_CONTEXT, 185 (char*)&key->hnd, 186 sizeof(SOCKET)); 187 /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later. 188 * So ignore the error status. 189 */ 177 190 178 191 /* Operation complete immediately. */ … … 707 720 case PJ_IOQUEUE_OP_ACCEPT: 708 721 /* special case for accept. */ 709 ioqueue_on_accept_complete( (ioqueue_accept_rec*)pOv);722 ioqueue_on_accept_complete(key, (ioqueue_accept_rec*)pOv); 710 723 if (key->cb.on_accept_complete) { 711 724 ioqueue_accept_rec *accept_rec = (ioqueue_accept_rec*)pOv; … … 1212 1225 int status; 1213 1226 1227 /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket 1228 * addresses can be obtained with getsockname() and getpeername(). 1229 */ 1230 status = setsockopt(sock, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, 1231 (char*)&key->hnd, sizeof(SOCKET)); 1232 /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later. 1233 * So ignore the error status. 1234 */ 1235 1214 1236 status = getsockname(sock, local, addrlen); 1215 1237 if (status != 0) { … … 1240 1262 if (status != PJ_SUCCESS) 1241 1263 return status; 1242 1243 /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket1244 * addresses can be obtained with getsockname() and getpeername().1245 */1246 status = setsockopt(op_key_rec->accept.newsock, SOL_SOCKET,1247 SO_UPDATE_ACCEPT_CONTEXT,1248 (char*)&key->hnd, sizeof(SOCKET));1249 /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later.1250 * So ignore the error status.1251 */1252 1264 1253 1265 op_key_rec->accept.operation = PJ_IOQUEUE_OP_ACCEPT; … … 1266 1278 1267 1279 if (rc == TRUE) { 1268 ioqueue_on_accept_complete( &op_key_rec->accept);1280 ioqueue_on_accept_complete(key, &op_key_rec->accept); 1269 1281 return PJ_SUCCESS; 1270 1282 } else { -
pjproject/trunk/pjlib/src/pjlib-test/ioq_tcp.c
r2983 r3051 98 98 } 99 99 } else { 100 pj_sockaddr addr; 101 int client_addr_len; 102 103 client_addr_len = sizeof(addr); 104 status = pj_sock_getsockname(sock, &addr, &client_addr_len); 105 if (status != PJ_SUCCESS) { 106 app_perror("...ERROR in pj_sock_getsockname()", status); 107 } 108 100 109 callback_accept_key = key; 101 110 callback_accept_op = op_key;
Note: See TracChangeset
for help on using the changeset viewer.