source: trunk/src/wsock32/wsock32.cpp@ 1385

Last change on this file since 1385 was 1385, checked in by phaller, 26 years ago

Fix: socket fixes

File size: 27.1 KB
Line 
1/* $Id: wsock32.cpp,v 1.9 1999-10-20 20:41:54 phaller Exp $ */
2
3/*
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 * Win32 SOCK32 for OS/2
8 *
9 * 1998/08/25 Vince Vielhaber
10 *
11 * @(#) wsock32.c 1.0.0 1998/08/25 VV initial release
12 * 1.0.1 1999/04/27 VV cleanup and implement select.
13 *
14 */
15
16
17/*****************************************************************************
18 * Includes *
19 *****************************************************************************/
20
21
22#define INCL_DOSPROCESS /* Process and thread values */
23#define INCL_DOSFILEMGR /* for DosRead and DosWrite */
24#define INCL_DOSQUEUES /* for unnamed pipes */
25#define INCL_DOSERRORS /* DOS error values */
26#define INCL_WINMESSAGEMGR /* Window Message Functions */
27#define INCL_WINMENUS /* Window Menu Functions */
28
29/* this is for IBM TCP/IP 5.0 headers as present in the current Warp 4 toolkit */
30#define TCPV40HDRS 1
31
32#define VV_BSD_SELECT /* undefine this if it interferes with other routines */
33
34#ifdef VV_BSD_SELECT
35# define BSD_SELECT
36#endif
37
38#include <os2wrap.h> //Odin32 OS/2 api wrappers
39#include <stdio.h>
40#include <stdlib.h>
41#include <stddef.h>
42#include <string.h>
43#include <ctype.h>
44#include <types.h>
45#include <odinwrap.h>
46#include <netdb.h>
47#include <sys/socket.h>
48#include <sys/ioctl.h>
49#include <netinet/in.h>
50
51#ifdef VV_BSD_SELECT
52# include <sys/select.h>
53#endif
54
55#include <sys/time.h>
56#include <win32type.h>
57#include "wsock32const.h"
58#include "wsock32.h"
59#include "misc.h"
60
61
62ODINDEBUGCHANNEL(WSOCK32-WSOCK32)
63
64
65/*****************************************************************************
66 * Defines *
67 *****************************************************************************/
68
69
70#ifdef FD_CLR
71#undef FD_CLR
72#define FD_CLR(x,y) WFD_CLR(x,y)
73#undef FD_SET
74#define FD_SET(x,y) WFD_SET(x,y)
75#undef FD_ZERO
76#define FD_ZERO(x) WFD_ZERO(x)
77#undef FD_ISSET
78#define FD_ISSET(x,y) WFD_SET(x,y)
79#endif
80
81
82// forwarder prototypes
83void _System SetLastError(int iError);
84int _System GetLastError(void);
85
86
87/*****************************************************************************
88 * Structures *
89 *****************************************************************************/
90
91typedef struct sockaddr* PSOCKADDR;
92
93//typedef struct _TRANSMIT_FILE_BUFFERS {
94// PVOID Head;
95// DWORD HeadLength;
96// PVOID Tail;
97// DWORD TailLength;
98//} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
99//
100//BOOL, OS2TransmitFile, //, IN, SOCKET, hSocket, //, IN, HANDLE, hFile, //, IN, DWORD, nNumberOfBytesToWrite, //, IN DWORD nNumberOfBytesPerSend,
101// IN LPOVERLAPPED lpOverlapped,
102// IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
103// IN DWORD dwReserved)
104//{
105// return FALSE;
106//}
107
108
109/*****************************************************************************
110 * Prototypes *
111 *****************************************************************************/
112
113
114/*****************************************************************************
115 * Local variables *
116 *****************************************************************************/
117
118// @@@PH not reentrancy proof
119static WHOSTENT whsnt;
120static WSERVENT wsvnt;
121static WPROTOENT wptnt;
122
123
124/*****************************************************************************
125 * Name :
126 * Purpose :
127 * Parameters:
128 * Variables :
129 * Result :
130 * Remark :
131 * Status : UNTESTED STUB
132 *
133 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
134 *****************************************************************************/
135
136void SetErrForDatabaseCalls(void)
137{
138 switch(h_errno)
139 {
140 case 1:
141 OS2WSASetLastError(11001); // host not found
142 break;
143 case 2:
144 OS2WSASetLastError(11002); // try again later
145 break;
146 case 3:
147 OS2WSASetLastError(11003); // No recovery
148 break;
149 case 4:
150 OS2WSASetLastError(11004); // No address or no data
151 break;
152 default:
153 OS2WSASetLastError(0); // unknown error and should never get here
154 dprintf(("WSOCK32: Unknown error condition: %d\n",
155 h_errno));
156 break;
157 }
158}
159
160
161/*****************************************************************************
162 * Name :
163 * Purpose :
164 * Parameters:
165 * Variables :
166 * Result :
167 * Remark :
168 * Status : UNTESTED STUB
169 *
170 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
171 *****************************************************************************/
172
173ODINFUNCTION2(int, OS2__WSAFDIsSet, SOCKET, fd,
174 Wfd_set FAR*, set)
175{
176 int i = set->fd_count;
177
178 while (i--)
179 if (set->fd_array[i] == fd)
180 return 1;
181
182 return 0;
183}
184
185
186/*****************************************************************************
187 * Name :
188 * Purpose :
189 * Parameters:
190 * Variables :
191 * Result :
192 * Remark :
193 * Status : UNTESTED STUB
194 *
195 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
196 *****************************************************************************/
197
198ODINFUNCTION3(SOCKET,OS2accept,SOCKET, s,
199 PSOCKADDR, addr,
200 int*, addrlen)
201{
202 return accept(s,addr,addrlen);
203}
204
205
206/*****************************************************************************
207 * Name :
208 * Purpose :
209 * Parameters:
210 * Variables :
211 * Result :
212 * Remark :
213 * Status : UNTESTED STUB
214 *
215 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
216 *****************************************************************************/
217
218ODINFUNCTION3(int,OS2bind,SOCKET, s,
219 const struct sockaddr *, addr,
220 int, namelen)
221{
222 return bind(s,(PSOCKADDR)addr,namelen);
223}
224
225
226/*****************************************************************************
227 * Name :
228 * Purpose :
229 * Parameters:
230 * Variables :
231 * Result :
232 * Remark :
233 * Status : UNTESTED STUB
234 *
235 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
236 *****************************************************************************/
237
238ODINFUNCTION1(int,OS2closesocket,SOCKET,s)
239{
240 return soclose((int)s);
241}
242
243
244/*****************************************************************************
245 * Name :
246 * Purpose :
247 * Parameters:
248 * Variables :
249 * Result :
250 * Remark :
251 * Status : UNTESTED STUB
252 *
253 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
254 *****************************************************************************/
255
256ODINFUNCTION3(int,OS2connect,SOCKET, s,
257 const struct sockaddr*, name,
258 int, namelen)
259{
260 return connect(s,
261 (PSOCKADDR)name,
262 namelen);
263}
264
265
266/*****************************************************************************
267 * Name :
268 * Purpose :
269 * Parameters:
270 * Variables :
271 * Result :
272 * Remark :
273 * Status : UNTESTED STUB
274 *
275 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
276 *****************************************************************************/
277
278ODINFUNCTION3(int,OS2ioctlsocket,SOCKET, s,
279 long, cmd,
280 u_long*, argp)
281{
282 return ioctl(s, cmd, (char *)argp, 4);
283}
284
285
286/*****************************************************************************
287 * Name :
288 * Purpose :
289 * Parameters:
290 * Variables :
291 * Result :
292 * Remark :
293 * Status : UNTESTED STUB
294 *
295 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
296 *****************************************************************************/
297
298ODINFUNCTION3(int,OS2getpeername,SOCKET, s,
299 PSOCKADDR,name,
300 int*, namelen)
301{
302 return getpeername(s,name,namelen);
303}
304
305
306/*****************************************************************************
307 * Name :
308 * Purpose :
309 * Parameters:
310 * Variables :
311 * Result :
312 * Remark :
313 * Status : UNTESTED STUB
314 *
315 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
316 *****************************************************************************/
317
318ODINFUNCTION3(int,OS2getsockname,SOCKET, s,
319 PSOCKADDR,name,
320 int*, namelen)
321{
322 return getsockname(s,name,namelen);
323}
324
325
326/*****************************************************************************
327 * Name :
328 * Purpose :
329 * Parameters:
330 * Variables :
331 * Result :
332 * Remark :
333 * Status : UNTESTED STUB
334 *
335 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
336 *****************************************************************************/
337
338ODINFUNCTION5(int,OS2getsockopt,SOCKET,s,
339 int, level,
340 int, optname,
341 char*, optval,
342 int*, optlen)
343{
344 return getsockopt(s,level,optname,optval,optlen);
345}
346
347
348/*****************************************************************************
349 * Name :
350 * Purpose :
351 * Parameters:
352 * Variables :
353 * Result :
354 * Remark :
355 * Status : UNTESTED STUB
356 *
357 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
358 *****************************************************************************/
359
360ODINFUNCTION1(u_long,OS2htonl,u_long,hostlong)
361{
362 return htonl(hostlong);
363}
364
365
366/*****************************************************************************
367 * Name :
368 * Purpose :
369 * Parameters:
370 * Variables :
371 * Result :
372 * Remark :
373 * Status : UNTESTED STUB
374 *
375 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
376 *****************************************************************************/
377
378ODINFUNCTION1(u_short,OS2htons,u_short,hostshort)
379{
380 return htons(hostshort);
381}
382
383
384/*****************************************************************************
385 * Name :
386 * Purpose :
387 * Parameters:
388 * Variables :
389 * Result :
390 * Remark :
391 * Status : UNTESTED STUB
392 *
393 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
394 *****************************************************************************/
395
396ODINFUNCTION1(u_long,OS2inet_addr,const char*, cp)
397{
398 return inet_addr((char *)cp);
399}
400
401
402/*****************************************************************************
403 * Name :
404 * Purpose :
405 * Parameters:
406 * Variables :
407 * Result :
408 * Remark :
409 * Status : UNTESTED STUB
410 *
411 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
412 *****************************************************************************/
413
414ODINFUNCTION1(char*,OS2inet_ntoa,struct in_addr,in)
415{
416 return inet_ntoa(in);
417}
418
419
420/*****************************************************************************
421 * Name :
422 * Purpose :
423 * Parameters:
424 * Variables :
425 * Result :
426 * Remark :
427 * Status : UNTESTED STUB
428 *
429 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
430 *****************************************************************************/
431
432ODINFUNCTION2(int,OS2listen,SOCKET,s,
433 int, backlog)
434{
435 return listen(s,backlog);
436}
437
438
439/*****************************************************************************
440 * Name :
441 * Purpose :
442 * Parameters:
443 * Variables :
444 * Result :
445 * Remark :
446 * Status : UNTESTED STUB
447 *
448 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
449 *****************************************************************************/
450
451ODINFUNCTION1(u_long,OS2ntohl,u_long,netlong)
452{
453 return ntohl(netlong);
454}
455
456
457/*****************************************************************************
458 * Name :
459 * Purpose :
460 * Parameters:
461 * Variables :
462 * Result :
463 * Remark :
464 * Status : UNTESTED STUB
465 *
466 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
467 *****************************************************************************/
468
469ODINFUNCTION1(u_short,OS2ntohs,u_short,netshort)
470{
471 return ntohs(netshort);
472}
473
474
475/*****************************************************************************
476 * Name :
477 * Purpose :
478 * Parameters:
479 * Variables :
480 * Result :
481 * Remark :
482 * Status : UNTESTED STUB
483 *
484 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
485 *****************************************************************************/
486
487ODINFUNCTION4(int,OS2recv,SOCKET,s,
488 char*, buf,
489 int, len,
490 int, flags)
491{
492 return recv(s,buf,len,flags);
493}
494
495
496/*****************************************************************************
497 * Name :
498 * Purpose :
499 * Parameters:
500 * Variables :
501 * Result :
502 * Remark :
503 * Status : UNTESTED STUB
504 *
505 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
506 *****************************************************************************/
507
508ODINFUNCTION6(int,OS2recvfrom,SOCKET, s,
509 char*, buf,
510 int, len,
511 int, flags,
512 PSOCKADDR, from,
513 int*, fromlen)
514{
515 return recvfrom(s,buf,len,flags,from,fromlen);
516}
517
518
519/*****************************************************************************
520 * Name :
521 * Purpose :
522 * Parameters:
523 * Variables :
524 * Result :
525 * Remark :
526 * Status : UNTESTED STUB
527 *
528 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
529 *****************************************************************************/
530
531#ifdef VV_BSD_SELECT
532
533ODINFUNCTION5(int,OS2select,int, nfds,
534 Wfd_set*, readfds,
535 Wfd_set*, writefds,
536 Wfd_set*, exceptfds,
537 const struct Wtimeval*, timeout)
538{
539 return select(nfds,
540 (fd_set *)readfds,
541 (fd_set *)writefds,
542 (fd_set *)exceptfds,
543 (timeval *)timeout);
544}
545
546#else
547# error OS/2-style select not implemented!
548#endif
549
550
551/*****************************************************************************
552 * Name :
553 * Purpose :
554 * Parameters:
555 * Variables :
556 * Result :
557 * Remark :
558 * Status : UNTESTED STUB
559 *
560 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
561 *****************************************************************************/
562
563ODINFUNCTION4(int,OS2send,SOCKET, s,
564 const char*, buf,
565 int, len,
566 int, flags)
567{
568 return send(s,(char *)buf,len,flags);
569}
570
571
572/*****************************************************************************
573 * Name :
574 * Purpose :
575 * Parameters:
576 * Variables :
577 * Result :
578 * Remark :
579 * Status : UNTESTED STUB
580 *
581 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
582 *****************************************************************************/
583
584ODINFUNCTION6(int,OS2sendto,SOCKET, s,
585 const char*, buf,
586 int, len,
587 int, flags,
588 const struct sockaddr*, to,
589 int, tolen)
590{
591 return sendto(s,(char *)buf,len,flags,(PSOCKADDR)to,tolen);
592}
593
594
595/*****************************************************************************
596 * Name :
597 * Purpose :
598 * Parameters:
599 * Variables :
600 * Result :
601 * Remark :
602 * Status : UNTESTED STUB
603 *
604 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
605 *****************************************************************************/
606
607ODINFUNCTION5(int,OS2setsockopt,SOCKET, s,
608 int, level,
609 int, optname,
610 const char*, optval,
611 int, optlen)
612{
613 struct Wlinger *yy;
614 struct linger xx;
615
616 if(level == SOL_SOCKET &&
617 optname == SO_LINGER)
618 {
619 yy = (struct Wlinger *)optval;
620 xx.l_onoff = (int)yy->l_onoff;
621 xx.l_linger = (int)yy->l_linger;
622
623 return setsockopt(s,level,optname,(char *)&xx,optlen);
624 }
625 else
626 return setsockopt(s,level,optname,(char *)optval,optlen);
627}
628
629
630/*****************************************************************************
631 * Name :
632 * Purpose :
633 * Parameters:
634 * Variables :
635 * Result :
636 * Remark :
637 * Status : UNTESTED STUB
638 *
639 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
640 *****************************************************************************/
641
642ODINFUNCTION2(int,OS2shutdown,SOCKET,s,
643 int, how)
644{
645 return shutdown(s,how);
646}
647
648
649/*****************************************************************************
650 * Name :
651 * Purpose :
652 * Parameters:
653 * Variables :
654 * Result :
655 * Remark :
656 * Status : UNTESTED STUB
657 *
658 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
659 *****************************************************************************/
660
661ODINFUNCTION3(SOCKET,OS2socket,int,af,
662 int,type,
663 int,protocol)
664{
665 return (SOCKET)socket(af,type,protocol);
666}
667
668
669/*****************************************************************************
670 * Name :
671 * Purpose :
672 * Parameters:
673 * Variables :
674 * Result :
675 * Remark :
676 * Status : UNTESTED STUB
677 *
678 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
679 *****************************************************************************/
680
681ODINFUNCTION3(WHOSTENT*,OS2gethostbyaddr,const char*, addr,
682 int, len,
683 int, type)
684{
685 WHOSTENT *yy;
686 struct hostent *xx;
687
688 xx = gethostbyaddr((char *)addr,len,type);
689
690 if(xx == NULL)
691 {
692 SetErrForDatabaseCalls();
693 return (WHOSTENT *)NULL;
694 }
695
696 whsnt.h_name = xx->h_name;
697 whsnt.h_aliases = xx->h_aliases;
698 whsnt.h_addrtype = (short)xx->h_addrtype;
699 whsnt.h_length = (short)xx->h_length;
700 whsnt.h_addr_list = xx->h_addr_list;
701
702 return &whsnt;
703}
704
705
706/*****************************************************************************
707 * Name :
708 * Purpose :
709 * Parameters:
710 * Variables :
711 * Result :
712 * Remark :
713 * Status : UNTESTED STUB
714 *
715 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
716 *****************************************************************************/
717
718ODINFUNCTION1(WHOSTENT*,OS2gethostbyname,const char*,name)
719{
720 WHOSTENT *yy;
721 struct hostent *xx;
722
723 xx = gethostbyname((char *)name);
724 if(xx == NULL)
725 {
726 SetErrForDatabaseCalls();
727 return (WHOSTENT *)NULL;
728 }
729
730 whsnt.h_name = xx->h_name;
731 whsnt.h_aliases = xx->h_aliases;
732 whsnt.h_addrtype = (short)xx->h_addrtype;
733 whsnt.h_length = (short)xx->h_length;
734 whsnt.h_addr_list = xx->h_addr_list;
735
736 return &whsnt;
737}
738
739
740/*****************************************************************************
741 * Name :
742 * Purpose :
743 * Parameters:
744 * Variables :
745 * Result :
746 * Remark :
747 * Status : UNTESTED STUB
748 *
749 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
750 *****************************************************************************/
751
752ODINFUNCTION2(int,OS2gethostname,char *,name,
753 int, namelen)
754{
755 return gethostname(name,namelen);
756}
757
758
759/*****************************************************************************
760 * Name :
761 * Purpose :
762 * Parameters:
763 * Variables :
764 * Result :
765 * Remark :
766 * Status : UNTESTED STUB
767 *
768 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
769 *****************************************************************************/
770
771ODINFUNCTION2(WSERVENT*,OS2getservbyport, int, port,
772 const char*, proto)
773{
774 struct servent *xx;
775
776 xx = getservbyport(port,(char *)proto);
777
778 if(xx == NULL)
779 { // this call doesn't generate an error message
780 return (WSERVENT *)NULL;
781 }
782
783 wsvnt.s_name = xx->s_name;
784 wsvnt.s_aliases = xx->s_aliases;
785 wsvnt.s_port = (short)xx->s_port;
786 wsvnt.s_proto = xx->s_proto;
787
788 return &wsvnt;
789}
790
791
792/*****************************************************************************
793 * Name :
794 * Purpose :
795 * Parameters:
796 * Variables :
797 * Result :
798 * Remark :
799 * Status : UNTESTED STUB
800 *
801 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
802 *****************************************************************************/
803
804ODINFUNCTION2(WSERVENT*,OS2getservbyname,const char*,name,
805 const char*,proto)
806{
807 WSERVENT *yy;
808 struct servent *xx;
809
810 xx = getservbyname((char *)name,(char *)proto);
811
812 if(xx == NULL)
813 { // this call doesn't generate an error message
814 return (WSERVENT *)NULL;
815 }
816
817 wsvnt.s_name = xx->s_name;
818 wsvnt.s_aliases = xx->s_aliases;
819 wsvnt.s_port = (short)xx->s_port;
820 wsvnt.s_proto = xx->s_proto;
821
822 return &wsvnt;
823}
824
825
826/*****************************************************************************
827 * Name :
828 * Purpose :
829 * Parameters:
830 * Variables :
831 * Result :
832 * Remark :
833 * Status : UNTESTED STUB
834 *
835 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
836 *****************************************************************************/
837
838ODINFUNCTION1(WPROTOENT*,OS2getprotobynumber,int,proto)
839{
840 struct protoent *xx;
841
842 xx = getprotobynumber(proto);
843
844 if(xx == NULL)
845 {
846 // this call doesn't generate an error message
847 return (WPROTOENT *)NULL;
848 }
849
850 wptnt.p_name = xx->p_name;
851 wptnt.p_aliases = xx->p_aliases;
852 wptnt.p_proto = (short)xx->p_proto;
853
854 return &wptnt;
855}
856
857
858/*****************************************************************************
859 * Name :
860 * Purpose :
861 * Parameters:
862 * Variables :
863 * Result :
864 * Remark :
865 * Status : UNTESTED STUB
866 *
867 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
868 *****************************************************************************/
869
870ODINFUNCTION1(WPROTOENT*,OS2getprotobyname,const char*,name)
871{
872 struct protoent *xx;
873
874 xx = getprotobyname((char *)name);
875
876 if(xx == NULL)
877 { // this call doesn't generate an error message
878 return (WPROTOENT *)NULL;
879 }
880
881 wptnt.p_name = xx->p_name;
882 wptnt.p_aliases = xx->p_aliases;
883 wptnt.p_proto = (short)xx->p_proto;
884
885 return &wptnt;
886}
887
888
889/*****************************************************************************
890 * Name :
891 * Purpose :
892 * Parameters:
893 * Variables :
894 * Result :
895 * Remark :
896 * Status : UNTESTED STUB
897 *
898 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
899 *****************************************************************************/
900
901ODINFUNCTION2(int,OS2WSAStartup,USHORT, wVersionRequired,
902 LPWSADATA,lpWsaData)
903{
904 APIRET rc;
905 int ii;
906
907 /* Make sure that the version requested is >= 1.1. */
908 /* The low byte is the major version and the high */
909 /* byte is the minor version. */
910
911 if ( LOBYTE( wVersionRequired ) < 1 ||
912 ( LOBYTE( wVersionRequired ) == 1 &&
913 HIBYTE( wVersionRequired ) < 1 )) {
914 return WSAVERNOTSUPPORTED;
915 }
916
917 /* Since we only support 1.1, set both wVersion and */
918 /* wHighVersion to 1.1. */
919
920 lpWsaData->wVersion = MAKEWORD( 1, 1 );
921 lpWsaData->wHighVersion = MAKEWORD( 1, 1 );
922 strcpy(lpWsaData->szDescription,"Win32OS2 WSOCK32.DLL Ver. 1.1");
923 lpWsaData->iMaxUdpDg = 32767;
924 lpWsaData->iMaxSockets = 2048;
925 strcpy(lpWsaData->szSystemStatus,"No Status");
926
927 if(sock_init() == 0)
928 {
929#ifdef DEBUG
930 WriteLog("WSOCK32: WSAStartup sock_init returned 0\n");
931#endif
932 return 0;
933 }
934 else
935 ii = sock_errno();
936
937 return ii;
938}
939
940
941/*****************************************************************************
942 * Name :
943 * Purpose :
944 * Parameters:
945 * Variables :
946 * Result :
947 * Remark :
948 * Status : UNTESTED STUB
949 *
950 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
951 *****************************************************************************/
952
953ODINFUNCTION0(int,OS2WSACleanup)
954{
955 return 0;
956}
957
958
959/*****************************************************************************
960 * Name :
961 * Purpose :
962 * Parameters:
963 * Variables :
964 * Result :
965 * Remark :
966 * Status : UNTESTED STUB
967 *
968 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
969 *****************************************************************************/
970
971ODINPROCEDURE1(OS2WSASetLastError,int,iError)
972{
973 SetLastError(iError);
974}
975
976
977/*****************************************************************************
978 * Name :
979 * Purpose :
980 * Parameters:
981 * Variables :
982 * Result :
983 * Remark :
984 * Status : UNTESTED STUB
985 *
986 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
987 *****************************************************************************/
988
989ODINFUNCTION0(int,OS2WSAGetLastError)
990{
991 return GetLastError();
992}
993
994
995/*****************************************************************************
996 * Name :
997 * Purpose :
998 * Parameters:
999 * Variables :
1000 * Result :
1001 * Remark :
1002 * Status : UNTESTED STUB
1003 *
1004 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1005 *****************************************************************************/
1006
1007ODINFUNCTION0(int,OS2WSAUnhookBlockingHook)
1008{
1009 dprintf(("WSOCK32: WSAUnhookBlockingHook unimplemented\n"));
1010
1011 return -5000; //WSAUnhookBlockingHook();
1012}
1013
1014
1015/*****************************************************************************
1016 * Name :
1017 * Purpose :
1018 * Parameters:
1019 * Variables :
1020 * Result :
1021 * Remark :
1022 * Status : UNTESTED STUB
1023 *
1024 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1025 *****************************************************************************/
1026
1027ODINFUNCTION1(PROC,OS2WSASetBlockingHook,PROC,lpBlockFund)
1028{
1029 dprintf(("WSOCK32: WSASetBlockingHook Unimplemented\n"));
1030 return (PROC)NULL;
1031}
1032
1033
1034/*****************************************************************************
1035 * Name :
1036 * Purpose :
1037 * Parameters:
1038 * Variables :
1039 * Result :
1040 * Remark :
1041 * Status : UNTESTED STUB
1042 *
1043 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1044 *****************************************************************************/
1045
1046ODINFUNCTION0(int,OS2WSACancelBlockingCall)
1047{
1048 dprintf(("WSOCK32: WSACancelBlockingCall unimplemented\n"));
1049
1050 return -5000; //WSACancelBlockingCall();
1051}
1052
1053
1054/*****************************************************************************
1055 * Name :
1056 * Purpose :
1057 * Parameters:
1058 * Variables :
1059 * Result :
1060 * Remark :
1061 * Status : UNTESTED STUB
1062 *
1063 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1064 *****************************************************************************/
1065
1066ODINFUNCTION4(int, OS2WSARecvEx, SOCKET, s,
1067 char FAR*, buf,
1068 int, len,
1069 int FAR *,flags)
1070{
1071 dprintf(("WSOCK32: WSARecvEx not implemented.\n"));
1072
1073// return WSARecvEx(s,buf,len,flags);
1074 return 0;
1075}
1076
1077
1078/*****************************************************************************
1079 * Name :
1080 * Purpose :
1081 * Parameters:
1082 * Variables :
1083 * Result :
1084 * Remark :
1085 * Status : UNTESTED STUB
1086 *
1087 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1088 *****************************************************************************/
1089
1090ODINPROCEDURE2(OS2s_perror, char*, pszMessage,
1091 void*, pUnknown)
1092{
1093 perror(pszMessage);
1094}
1095
1096
Note: See TracBrowser for help on using the repository browser.