- Timestamp:
- May 2, 2000, 3:09:44 PM (25 years ago)
- Location:
- trunk/src/wsock32
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wsock32/asyncapi.cpp
r3439 r3472 1 /* $Id: asyncapi.cpp,v 1. 6 2000-04-23 15:55:52 sandervlExp $ */1 /* $Id: asyncapi.cpp,v 1.7 2000-05-02 13:09:43 bird Exp $ */ 2 2 3 3 /* … … 31 31 #include "dbglocal.h" 32 32 33 //kso: dirty fix to make this compile! not permanent! 34 BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER *p); 35 #define LowPart u.LowPart 36 37 33 38 ODINDEBUGCHANNEL(WSOCK32-ASYNC) 34 39 … … 42 47 int size = 0; 43 48 int fail = NO_ERROR; 44 49 45 50 if(!pThreadParm->fCancelled) 46 51 { … … 59 64 } 60 65 else { 61 ret = gethostbyaddr(pThreadParm->u.gethostbyaddr.addr, 66 ret = gethostbyaddr(pThreadParm->u.gethostbyaddr.addr, 62 67 pThreadParm->u.gethostbyaddr.len, 63 68 pThreadParm->u.gethostbyaddr.type); … … 152 157 if(!pThreadParm->fCancelled) { 153 158 dprintf(("WSAsyncThreadProc %x %x %x %x", pThreadParm->hwnd, pThreadParm->msg, pThreadParm->hAsyncTaskHandle, lParam)); 154 PostMessageA(pThreadParm->hwnd, pThreadParm->msg, 159 PostMessageA(pThreadParm->hwnd, pThreadParm->msg, 155 160 (WPARAM)pThreadParm->hAsyncTaskHandle, lParam); 156 161 } 157 162 pThreadParm->fActive = FALSE; 158 RemoveFromQueue(pThreadParm); 159 } 160 //****************************************************************************** 161 //****************************************************************************** 162 LHANDLE WSAAsyncRequest(AsyncRequestType requesttype, HWND hwnd, int msg, char *buf, 163 RemoveFromQueue(pThreadParm); 164 } 165 //****************************************************************************** 166 //****************************************************************************** 167 LHANDLE WSAAsyncRequest(AsyncRequestType requesttype, HWND hwnd, int msg, char *buf, 163 168 int buflen, PVOID param1, PVOID param2, PVOID param3, 164 169 PVOID param4) … … 303 308 } 304 309 return 0; 305 } 310 } 306 311 //****************************************************************************** 307 312 //****************************************************************************** … … 315 320 dprintf(("WSAAsyncGetHostByName %s", name)); 316 321 317 return WSAAsyncRequest(ASYNC_GETHOSTBYNAME, hWnd, wMsg, buf, buflen, 322 return WSAAsyncRequest(ASYNC_GETHOSTBYNAME, hWnd, wMsg, buf, buflen, 318 323 (PVOID)name, 0, 0, 0); 319 324 } … … 331 336 dprintf(("WSAAsyncGetHostByAddr %s", addr)); 332 337 333 return WSAAsyncRequest(ASYNC_GETHOSTBYADDR, hWnd, wMsg, buf, buflen, 338 return WSAAsyncRequest(ASYNC_GETHOSTBYADDR, hWnd, wMsg, buf, buflen, 334 339 (PVOID)addr, (PVOID)len, (PVOID)type, 0); 335 340 } … … 345 350 dprintf(("WSAAsyncGetProtoByName %s", name)); 346 351 347 return WSAAsyncRequest(ASYNC_GETPROTOBYNAME, hWnd, wMsg, buf, buflen, 352 return WSAAsyncRequest(ASYNC_GETPROTOBYNAME, hWnd, wMsg, buf, buflen, 348 353 (PVOID)name, 0, 0, 0); 349 354 } … … 359 364 dprintf(("WSAAsyncGetProtoByNumber %d", number)); 360 365 361 return WSAAsyncRequest(ASYNC_GETPROTOBYNUMBER, hWnd, wMsg, buf, buflen, 366 return WSAAsyncRequest(ASYNC_GETPROTOBYNUMBER, hWnd, wMsg, buf, buflen, 362 367 (PVOID)number, 0, 0, 0); 363 368 } … … 374 379 dprintf(("WSAAsyncGetServByName %s", name)); 375 380 376 return WSAAsyncRequest(ASYNC_GETSERVBYNAME, hWnd, wMsg, buf, buflen, 381 return WSAAsyncRequest(ASYNC_GETSERVBYNAME, hWnd, wMsg, buf, buflen, 377 382 (PVOID)name, (PVOID)proto, 0, 0); 378 383 } … … 389 394 dprintf(("WSAAsyncGetServByPort %d %s", port, proto)); 390 395 391 return WSAAsyncRequest(ASYNC_GETSERVBYPORT, hWnd, wMsg, buf, buflen, 396 return WSAAsyncRequest(ASYNC_GETSERVBYPORT, hWnd, wMsg, buf, buflen, 392 397 (PVOID)port, (PVOID)proto, 0, 0); 393 398 } … … 401 406 402 407 dprintf(("AsyncNotifyEvent %x %x %x %x", pThreadParm->u.asyncselect.s, pThreadParm->hwnd, pThreadParm->msg, event)); 403 PostMessageA(pThreadParm->hwnd, pThreadParm->msg, (WPARAM)pThreadParm->u.asyncselect.s, 408 PostMessageA(pThreadParm->hwnd, pThreadParm->msg, (WPARAM)pThreadParm->u.asyncselect.s, 404 409 (LPARAM)event); 405 410 } … … 416 421 int noread, nowrite, noexcept, state, sockoptlen, sockoptval; 417 422 int tmp, i, lEventsPending, ret, bytesread; 418 423 419 424 while(TRUE) 420 425 { … … 464 469 selecterr += SOCBASEERR; 465 470 } 466 switch(selecterr) 471 switch(selecterr) 467 472 { 468 473 case SOCEINTR: … … 481 486 //but can still send 482 487 pThreadParm->u.asyncselect.lEventsPending &= ~(FD_READ | FD_ACCEPT); 483 goto asyncloopstart; 488 goto asyncloopstart; 484 489 485 490 case SOCEINVAL: … … 513 518 AsyncNotifyEvent(pThreadParm, FD_CONNECT, WSAECONNREFUSED); 514 519 } 515 } 520 } 516 521 } 517 522 else … … 524 529 { 525 530 state = ioctl(s, FIONREAD, (CHAR *) &bytesread, sizeof(bytesread)); 526 if(state == SOCKET_ERROR) 531 if(state == SOCKET_ERROR) 527 532 { 528 if(lEventsPending & FD_CLOSE) 533 if(lEventsPending & FD_CLOSE) 529 534 { 530 535 dprintf(("FD_CLOSE; ioctl; socket error")); … … 540 545 } 541 546 } 542 if(lEventsPending & FD_ACCEPT) 547 if(lEventsPending & FD_ACCEPT) 543 548 { 544 549 sockoptlen = sizeof(sockoptlen); … … 560 565 //SvL: This generates FD_CLOSE messages when the connection is just fine 561 566 // (recv executed in another thread when select returns) 562 else 567 else 563 568 if((lEventsPending & FD_CLOSE) && (state == 0 && bytesread == 0)) { 564 569 dprintf(("FD_CLOSE; state == 0 && bytesread == 0")); … … 573 578 } 574 579 } 575 if((pThreadParm->u.asyncselect.lEventsPending & (FD_ACCEPT|FD_CLOSE|FD_CONNECT)) == 580 if((pThreadParm->u.asyncselect.lEventsPending & (FD_ACCEPT|FD_CLOSE|FD_CONNECT)) == 576 581 (lEventsPending & (FD_ACCEPT|FD_CLOSE|FD_CONNECT))) { 577 582 DosSleep(10); … … 580 585 //remove it first, then delete semaphore object 581 586 pThreadParm->fActive = FALSE; 582 RemoveFromQueue(pThreadParm); 587 RemoveFromQueue(pThreadParm); 583 588 delete pThreadParm->u.asyncselect.asyncSem; 584 589 pThreadParm->u.asyncselect.asyncSem = 0; -
trunk/src/wsock32/unknown.cpp
r3229 r3472 1 /* $Id: unknown.cpp,v 1. 7 2000-03-24 19:28:08 sandervlExp $ */1 /* $Id: unknown.cpp,v 1.8 2000-05-02 13:09:43 bird Exp $ */ 2 2 3 3 /* … … 19 19 #define DBG_LOCALLOG DBG_unknown 20 20 #include "dbglocal.h" 21 22 //kso: dirty fix to make this compile! not permanent! 23 BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER *); 24 #define LowPart u.LowPart 21 25 22 26 ODINDEBUGCHANNEL(WSOCK32-UNKNOWN) -
trunk/src/wsock32/wsa.cpp
r3282 r3472 1 /* $Id: wsa.cpp,v 1. 5 2000-03-30 20:52:55 sandervlExp $ */1 /* $Id: wsa.cpp,v 1.6 2000-05-02 13:09:43 bird Exp $ */ 2 2 3 3 /* … … 32 32 ODINDEBUGCHANNEL(WSOCK32-WSA) 33 33 34 //kso: dirty fix to make this compile! not permanent! 35 BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER *p); 36 #define LowPart u.LowPart 37 38 34 39 #ifndef winsockcleanupsockets 35 40 // Exported by SO32DLL. Used to close all open sockets. … … 59 64 if (!lpWSAData) return WSAEINVAL; 60 65 61 if(fWSAInitialized == FALSE) 66 if(fWSAInitialized == FALSE) 62 67 { 63 68 WINSOCK_CreateIData(); … … 142 147 //****************************************************************************** 143 148 //****************************************************************************** 144 void WSASetBlocking(BOOL fBlock, HANDLE tid) 149 void WSASetBlocking(BOOL fBlock, HANDLE tid) 145 150 { 146 151 LPWSINFO pwsi = WINSOCK_GetIData(tid); … … 161 166 { 162 167 int i = set->fd_count; 163 168 164 169 while (i--) 165 170 if (set->fd_array[i] == s) return 1; … … 205 210 case SOCENETRESET: return WSAENETRESET; 206 211 case SOCECONNABORTED: return WSAECONNABORTED; 207 case SOCEPIPE: 212 case SOCEPIPE: 208 213 case SOCECONNRESET: return WSAECONNRESET; 209 214 case SOCENOBUFS: return WSAENOBUFS; … … 241 246 case TRY_AGAIN: return WSATRY_AGAIN; 242 247 case NO_RECOVERY: return WSANO_RECOVERY; 243 case NO_DATA: return WSANO_DATA; 248 case NO_DATA: return WSANO_DATA; 244 249 245 250 case 0: return 0; -
trunk/src/wsock32/wsock32.cpp
r3282 r3472 1 /* $Id: wsock32.cpp,v 1.2 7 2000-03-30 20:52:56 sandervlExp $ */1 /* $Id: wsock32.cpp,v 1.28 2000-05-02 13:09:44 bird Exp $ */ 2 2 3 3 /* … … 63 63 #include "dbglocal.h" 64 64 65 //kso: dirty fix to make this compile! not permanent! 66 BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER *p); 67 #define LowPart u.LowPart 68 65 69 66 70 ODINDEBUGCHANNEL(WSOCK32-WSOCK32) … … 105 109 { 106 110 LPWSINFO iData; 107 111 108 112 iData = (LPWSINFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WSINFO)); 109 113 if (!iData) … … 122 126 if (iData) { 123 127 ppid = lpFirstIData; 124 while(ppid) 128 while(ppid) 125 129 { 126 130 iData = ppid; … … 171 175 WSASetLastError(WSANOTINITIALISED); 172 176 return SOCKET_ERROR; 173 } 174 else 175 if(WSAIsBlocking()) { 176 WSASetLastError(WSAEINPROGRESS); 177 return SOCKET_ERROR; 178 } 177 } 178 else 179 if(WSAIsBlocking()) { 180 WSASetLastError(WSAEINPROGRESS); 181 return SOCKET_ERROR; 182 } 179 183 ret = shutdown(s, how); 180 184 181 185 if(ret == SOCKET_ERROR) { 182 186 WSASetLastError(wsaErrno()); … … 197 201 WSASetLastError(WSANOTINITIALISED); 198 202 return SOCKET_ERROR; 199 } 200 else 201 if(WSAIsBlocking()) { 202 WSASetLastError(WSAEINPROGRESS); 203 return SOCKET_ERROR; 204 } 203 } 204 else 205 if(WSAIsBlocking()) { 206 WSASetLastError(WSAEINPROGRESS); 207 return SOCKET_ERROR; 208 } 205 209 s = socket(af, type, protocol); 206 210 207 211 if(s == SOCKET_ERROR && sock_errno() == SOCEPFNOSUPPORT) { 208 212 //map SOCEPFNOSUPPORT to SOCEPFNOSUPPORT … … 225 229 WSASetLastError(WSANOTINITIALISED); 226 230 return SOCKET_ERROR; 227 } 228 else 229 if(WSAIsBlocking()) { 230 WSASetLastError(WSAEINPROGRESS); 231 return SOCKET_ERROR; 232 } 231 } 232 else 233 if(WSAIsBlocking()) { 234 WSASetLastError(WSAEINPROGRESS); 235 return SOCKET_ERROR; 236 } 233 237 ret = soclose(s); 234 238 //Close WSAAsyncSelect thread if one was created for this socket 235 239 FindAndSetAsyncEvent(s, 0, 0, 0); 236 240 237 241 if(ret == SOCKET_ERROR) { 238 242 WSASetLastError(wsaErrno()); … … 253 257 WSASetLastError(WSANOTINITIALISED); 254 258 return SOCKET_ERROR; 255 } 256 else 257 if(WSAIsBlocking()) { 258 WSASetLastError(WSAEINPROGRESS); 259 return SOCKET_ERROR; 260 } 259 } 260 else 261 if(WSAIsBlocking()) { 262 WSASetLastError(WSAEINPROGRESS); 263 return SOCKET_ERROR; 264 } 261 265 ret = connect(s, (sockaddr *)name, namelen); 262 266 // map BSD error codes … … 268 272 if(sockerror == SOCEINPROGRESS) { 269 273 WSASetLastError(WSAEWOULDBLOCK); 270 } 271 else 274 } 275 else 272 276 if(sockerror == SOCEOPNOTSUPP) { 273 277 WSASetLastError(WSAEINVAL); … … 290 294 WSASetLastError(WSANOTINITIALISED); 291 295 return SOCKET_ERROR; 292 } 293 else 294 if(WSAIsBlocking()) { 295 WSASetLastError(WSAEINPROGRESS); 296 return SOCKET_ERROR; 297 } 296 } 297 else 298 if(WSAIsBlocking()) { 299 WSASetLastError(WSAEINPROGRESS); 300 return SOCKET_ERROR; 301 } 298 302 // clear high word (not used in OS/2's tcpip stack) 299 303 cmd = LOUSHORT(cmd); … … 354 358 WSASetLastError(WSANOTINITIALISED); 355 359 return SOCKET_ERROR; 356 } 357 else 358 if(WSAIsBlocking()) { 359 WSASetLastError(WSAEINPROGRESS); 360 return SOCKET_ERROR; 361 } 362 else 360 } 361 else 362 if(WSAIsBlocking()) { 363 WSASetLastError(WSAEINPROGRESS); 364 return SOCKET_ERROR; 365 } 366 else 363 367 if (namelen == NULL || *namelen < (int)sizeof(struct sockaddr_in)) { 364 368 WSASetLastError(WSAEFAULT); … … 384 388 WSASetLastError(WSANOTINITIALISED); 385 389 return SOCKET_ERROR; 386 } 387 else 388 if(WSAIsBlocking()) { 389 WSASetLastError(WSAEINPROGRESS); 390 return SOCKET_ERROR; 391 } 392 else 390 } 391 else 392 if(WSAIsBlocking()) { 393 WSASetLastError(WSAEINPROGRESS); 394 return SOCKET_ERROR; 395 } 396 else 393 397 if (namelen == NULL || *namelen < (int)sizeof(struct sockaddr_in)) { 394 398 WSASetLastError(WSAEFAULT); … … 460 464 WSASetLastError(WSANOTINITIALISED); 461 465 return SOCKET_ERROR; 462 } 463 else 464 if(WSAIsBlocking()) { 465 WSASetLastError(WSAEINPROGRESS); 466 return SOCKET_ERROR; 467 } 468 else 466 } 467 else 468 if(WSAIsBlocking()) { 469 WSASetLastError(WSAEINPROGRESS); 470 return SOCKET_ERROR; 471 } 472 else 469 473 if ((addr != NULL) && (addrlen != NULL)) { 470 474 if (*addrlen < (int)sizeof(struct sockaddr_in)) { … … 505 509 WSASetLastError(WSANOTINITIALISED); 506 510 return SOCKET_ERROR; 507 } 508 else 509 if(WSAIsBlocking()) { 510 WSASetLastError(WSAEINPROGRESS); 511 return SOCKET_ERROR; 512 } 513 else 511 } 512 else 513 if(WSAIsBlocking()) { 514 WSASetLastError(WSAEINPROGRESS); 515 return SOCKET_ERROR; 516 } 517 else 514 518 if(namelen < (int)sizeof(struct sockaddr_in)) { 515 519 WSASetLastError(WSAEFAULT); … … 536 540 WSASetLastError(WSANOTINITIALISED); 537 541 return SOCKET_ERROR; 538 } 539 else 540 if(WSAIsBlocking()) { 541 WSASetLastError(WSAEINPROGRESS); 542 return SOCKET_ERROR; 543 } 542 } 543 else 544 if(WSAIsBlocking()) { 545 WSASetLastError(WSAEINPROGRESS); 546 return SOCKET_ERROR; 547 } 544 548 namelen = sizeof(name); 545 549 ret = getsockname(s, (struct sockaddr *)&name, &namelen); … … 549 553 WSASetLastError(WSAEINVAL); 550 554 return SOCKET_ERROR; 551 } 555 } 552 556 ret = ioctl(s, FIOBSTATUS, (char *)&tmp, sizeof(tmp)) & 553 557 (SS_ISCONNECTING | SS_ISCONNECTED | SS_ISDISCONNECTING); … … 579 583 WSASetLastError(WSANOTINITIALISED); 580 584 return SOCKET_ERROR; 581 } 582 else 583 if(WSAIsBlocking()) { 584 WSASetLastError(WSAEINPROGRESS); 585 return SOCKET_ERROR; 586 } 585 } 586 else 587 if(WSAIsBlocking()) { 588 WSASetLastError(WSAEINPROGRESS); 589 return SOCKET_ERROR; 590 } 587 591 ret = recv(s, buf, len, flags); 588 592 … … 611 615 WSASetLastError(WSANOTINITIALISED); 612 616 return SOCKET_ERROR; 613 } 614 else 615 if(WSAIsBlocking()) { 616 WSASetLastError(WSAEINPROGRESS); 617 return SOCKET_ERROR; 618 } 619 else 617 } 618 else 619 if(WSAIsBlocking()) { 620 WSASetLastError(WSAEINPROGRESS); 621 return SOCKET_ERROR; 622 } 623 else 620 624 if(fromlen == NULL || *fromlen < (int)sizeof(struct sockaddr_in)) { 621 625 WSASetLastError(WSAEFAULT); … … 646 650 WSASetLastError(WSANOTINITIALISED); 647 651 return SOCKET_ERROR; 648 } 649 else 650 if(WSAIsBlocking()) { 651 WSASetLastError(WSAEINPROGRESS); 652 return SOCKET_ERROR; 653 } 652 } 653 else 654 if(WSAIsBlocking()) { 655 WSASetLastError(WSAEINPROGRESS); 656 return SOCKET_ERROR; 657 } 654 658 ret = send(s, (char *)buf, len, flags); 655 659 … … 678 682 WSASetLastError(WSANOTINITIALISED); 679 683 return SOCKET_ERROR; 680 } 681 else 682 if(WSAIsBlocking()) { 683 WSASetLastError(WSAEINPROGRESS); 684 return SOCKET_ERROR; 685 } 686 else 684 } 685 else 686 if(WSAIsBlocking()) { 687 WSASetLastError(WSAEINPROGRESS); 688 return SOCKET_ERROR; 689 } 690 else 687 691 if(tolen < (int)sizeof(struct sockaddr_in)) { 688 692 WSASetLastError(WSAEFAULT); … … 719 723 WSASetLastError(WSANOTINITIALISED); 720 724 return SOCKET_ERROR; 721 } 722 else 723 if(WSAIsBlocking()) { 724 WSASetLastError(WSAEINPROGRESS); 725 return SOCKET_ERROR; 726 } 725 } 726 else 727 if(WSAIsBlocking()) { 728 WSASetLastError(WSAEINPROGRESS); 729 return SOCKET_ERROR; 730 } 727 731 else { 728 732 nrread = nrwrite = nrexcept = 0; … … 746 750 if(timeout == NULL) { 747 751 ttimeout = -1L; // no timeout 748 } 752 } 749 753 else ttimeout = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; 750 754 751 755 sockets = (int *)malloc(sizeof(int) * (nrread+nrwrite+nrexcept)); 752 756 if(readfds) { … … 762 766 ret = select(sockets, nrread, nrwrite, nrexcept, ttimeout); 763 767 764 if(ret == SOCKET_ERROR) 768 if(ret == SOCKET_ERROR) 765 769 { 766 770 if(readfds != NULL) … … 776 780 free(sockets); 777 781 return SOCKET_ERROR; 778 } 782 } 779 783 780 784 if(ret != 0) { … … 813 817 exceptfds->fd_count = j; 814 818 } 815 } 819 } 816 820 else { 817 821 if(readfds != NULL) … … 845 849 WSASetLastError(WSANOTINITIALISED); 846 850 return SOCKET_ERROR; 847 } 848 else 849 if(WSAIsBlocking()) { 850 WSASetLastError(WSAEINPROGRESS); 851 return SOCKET_ERROR; 852 } 851 } 852 else 853 if(WSAIsBlocking()) { 854 WSASetLastError(WSAEINPROGRESS); 855 return SOCKET_ERROR; 856 } 853 857 if (level == SOL_SOCKET) { 854 858 switch(optname) { … … 896 900 ret = setsockopt(s, level, optname, (char *)optval, optlen); 897 901 break; 898 default: 902 default: 899 903 dprintf(("setsockopt: unknown option %x", optname)); 900 904 WSASetLastError(WSAENOPROTOOPT); 901 905 return SOCKET_ERROR; 902 } 903 } 904 else 906 } 907 } 908 else 905 909 if(level == IPPROTO_TCP) { 906 910 if(optname == TCP_NODELAY) { … … 910 914 } 911 915 ret = setsockopt(s, level, optname, (char *)optval, optlen); 912 } 916 } 913 917 else { 914 918 dprintf(("setsockopt: unknown option %x", optname)); … … 916 920 return SOCKET_ERROR; 917 921 } 918 } 922 } 919 923 else { 920 924 WSASetLastError(WSAEINVAL); … … 945 949 WSASetLastError(WSANOTINITIALISED); 946 950 return SOCKET_ERROR; 947 } 948 else 949 if(WSAIsBlocking()) { 950 WSASetLastError(WSAEINPROGRESS); 951 return SOCKET_ERROR; 952 } 951 } 952 else 953 if(WSAIsBlocking()) { 954 WSASetLastError(WSAEINPROGRESS); 955 return SOCKET_ERROR; 956 } 953 957 if (level == SOL_SOCKET) { 954 958 switch(optname) { … … 994 998 } 995 999 break; 996 default: 1000 default: 997 1001 dprintf(("getsockopt: unknown option %x", optname)); 998 1002 WSASetLastError(WSAENOPROTOOPT); 999 1003 return SOCKET_ERROR; 1000 } 1001 } 1002 else 1004 } 1005 } 1006 else 1003 1007 if(level == IPPROTO_TCP) { 1004 1008 if(optname == TCP_NODELAY) { … … 1008 1012 } 1009 1013 ret = getsockopt(s, level, optname, (char *)optval, optlen); 1010 } 1014 } 1011 1015 else { 1012 1016 dprintf(("getsockopt: unknown option %x", optname)); … … 1014 1018 return SOCKET_ERROR; 1015 1019 } 1016 } 1020 } 1017 1021 else { 1018 1022 WSASetLastError(WSAEINVAL); … … 1110 1114 } 1111 1115 else WSASetLastError(WSANO_DATA); 1112 } 1116 } 1113 1117 else WSASetLastError(WSANOTINITIALISED); 1114 1118 return NULL; … … 1133 1137 } 1134 1138 else WSASetLastError(WSANO_DATA); 1135 } 1139 } 1136 1140 else WSASetLastError(WSANOTINITIALISED); 1137 1141 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.