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

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

Fix: error codes for async operations

File size: 29.9 KB
Line 
1/* $Id: wsock32.cpp,v 1.11 1999-10-27 08:38:05 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
136#define CASEERR2(a) case SOC##a: case a: return WSA##a;
137#define CASEERR1(a) case SOC##a: return WSA##a;
138
139int iTranslateSockErrToWSock(int iError)
140{
141 switch(iError)
142 {
143 CASEERR2(EINTR)
144 CASEERR2(EBADF)
145 CASEERR2(EACCES)
146 CASEERR2(EINVAL)
147 CASEERR2(EMFILE)
148
149 CASEERR1(EWOULDBLOCK)
150 CASEERR1(EINPROGRESS)
151 CASEERR1(EALREADY)
152 CASEERR1(ENOTSOCK)
153// CASEERR1(EDESTADRREQ)
154 CASEERR1(EMSGSIZE)
155 CASEERR1(EPROTOTYPE)
156 CASEERR1(ENOPROTOOPT)
157 CASEERR1(EPROTONOSUPPORT)
158 CASEERR1(ESOCKTNOSUPPORT)
159 CASEERR1(EOPNOTSUPP)
160 CASEERR1(EPFNOSUPPORT)
161 CASEERR1(EAFNOSUPPORT)
162 CASEERR1(EADDRINUSE)
163 CASEERR1(EADDRNOTAVAIL)
164 CASEERR1(ENETDOWN)
165 CASEERR1(ENETUNREACH)
166 CASEERR1(ENETRESET)
167 CASEERR1(ECONNABORTED)
168 CASEERR1(ECONNRESET)
169 CASEERR1(ENOBUFS)
170 CASEERR1(EISCONN)
171 CASEERR1(ENOTCONN)
172 CASEERR1(ESHUTDOWN)
173 CASEERR1(ETOOMANYREFS)
174 CASEERR1(ETIMEDOUT)
175 CASEERR1(ECONNREFUSED)
176 CASEERR1(ELOOP)
177 CASEERR1(ENAMETOOLONG)
178 CASEERR1(EHOSTDOWN)
179 CASEERR1(EHOSTUNREACH)
180
181 CASEERR1(ENOTEMPTY)
182// CASEERR(EPROCLIM)
183// CASEERR(EUSERS)
184// CASEERR(EDQUOT)
185// CASEERR(ESTALE)
186// CASEERR(EREMOTE)
187// CASEERR(EDISCON)
188
189
190 default:
191 dprintf(("WSOCK32: Unknown error condition: %d\n",
192 iError));
193 return iError;
194 }
195}
196
197
198/*****************************************************************************
199 * Name :
200 * Purpose :
201 * Parameters:
202 * Variables :
203 * Result :
204 * Remark :
205 * Status : UNTESTED STUB
206 *
207 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
208 *****************************************************************************/
209
210ODINFUNCTION2(int, OS2__WSAFDIsSet, SOCKET, fd,
211 Wfd_set FAR*, set)
212{
213 int i = set->fd_count;
214
215 while (i--)
216 if (set->fd_array[i] == fd)
217 return 1;
218
219 return 0;
220}
221
222
223/*****************************************************************************
224 * Name :
225 * Purpose :
226 * Parameters:
227 * Variables :
228 * Result :
229 * Remark :
230 * Status : UNTESTED STUB
231 *
232 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
233 *****************************************************************************/
234
235ODINFUNCTION3(SOCKET,OS2accept,SOCKET, s,
236 PSOCKADDR, addr,
237 int*, addrlen)
238{
239 SOCKET rc = accept(s,addr,addrlen);
240
241 if (rc == INVALID_SOCKET)
242 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
243
244 return rc;
245}
246
247
248/*****************************************************************************
249 * Name :
250 * Purpose :
251 * Parameters:
252 * Variables :
253 * Result :
254 * Remark :
255 * Status : UNTESTED STUB
256 *
257 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
258 *****************************************************************************/
259
260ODINFUNCTION3(int,OS2bind,SOCKET, s,
261 const struct sockaddr *, addr,
262 int, namelen)
263{
264 int rc = bind(s,(PSOCKADDR)addr,namelen);
265
266 if (rc < 0)
267 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
268
269 return rc;
270}
271
272
273/*****************************************************************************
274 * Name :
275 * Purpose :
276 * Parameters:
277 * Variables :
278 * Result :
279 * Remark :
280 * Status : UNTESTED STUB
281 *
282 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
283 *****************************************************************************/
284
285ODINFUNCTION1(int,OS2closesocket,SOCKET,s)
286{
287 int rc = soclose((int)s);
288
289 if (rc < 0)
290 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
291
292 return rc;
293}
294
295
296/*****************************************************************************
297 * Name :
298 * Purpose :
299 * Parameters:
300 * Variables :
301 * Result :
302 * Remark :
303 * Status : UNTESTED STUB
304 *
305 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
306 *****************************************************************************/
307
308ODINFUNCTION3(int,OS2connect,SOCKET, s,
309 const struct sockaddr*, name,
310 int, namelen)
311{
312 int rc = connect(s,
313 (PSOCKADDR)name,
314 namelen);
315
316 if (rc < 0)
317 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
318
319 return rc;
320}
321
322
323/*****************************************************************************
324 * Name :
325 * Purpose :
326 * Parameters:
327 * Variables :
328 * Result :
329 * Remark :
330 * Status : UNTESTED STUB
331 *
332 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
333 *****************************************************************************/
334
335ODINFUNCTION3(int,OS2ioctlsocket,SOCKET, s,
336 long, cmd,
337 u_long*, argp)
338{
339 int rc = ioctl(s, cmd, (char *)argp, 4);
340
341 if (rc < 0)
342 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
343
344 return rc;
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
360ODINFUNCTION3(int,OS2getpeername,SOCKET, s,
361 PSOCKADDR,name,
362 int*, namelen)
363{
364 SOCKET rc = getpeername(s,name,namelen);
365
366 if (rc == SOCKET_ERROR)
367 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
368
369 return rc;
370}
371
372
373/*****************************************************************************
374 * Name :
375 * Purpose :
376 * Parameters:
377 * Variables :
378 * Result :
379 * Remark :
380 * Status : UNTESTED STUB
381 *
382 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
383 *****************************************************************************/
384
385ODINFUNCTION3(int,OS2getsockname,SOCKET, s,
386 PSOCKADDR,name,
387 int*, namelen)
388{
389 SOCKET rc = getsockname(s,name,namelen);
390
391 if (rc == SOCKET_ERROR)
392 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
393
394 return rc;
395}
396
397
398/*****************************************************************************
399 * Name :
400 * Purpose :
401 * Parameters:
402 * Variables :
403 * Result :
404 * Remark :
405 * Status : UNTESTED STUB
406 *
407 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
408 *****************************************************************************/
409
410ODINFUNCTION5(int,OS2getsockopt,SOCKET,s,
411 int, level,
412 int, optname,
413 char*, optval,
414 int*, optlen)
415{
416 int rc = getsockopt(s,level,optname,optval,optlen);
417
418 if (rc == SOCKET_ERROR)
419 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
420
421 return rc;
422}
423
424
425/*****************************************************************************
426 * Name :
427 * Purpose :
428 * Parameters:
429 * Variables :
430 * Result :
431 * Remark :
432 * Status : UNTESTED STUB
433 *
434 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
435 *****************************************************************************/
436
437ODINFUNCTION1(u_long,OS2htonl,u_long,hostlong)
438{
439 return htonl(hostlong);
440}
441
442
443/*****************************************************************************
444 * Name :
445 * Purpose :
446 * Parameters:
447 * Variables :
448 * Result :
449 * Remark :
450 * Status : UNTESTED STUB
451 *
452 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
453 *****************************************************************************/
454
455ODINFUNCTION1(u_short,OS2htons,u_short,hostshort)
456{
457 return htons(hostshort);
458}
459
460
461/*****************************************************************************
462 * Name :
463 * Purpose :
464 * Parameters:
465 * Variables :
466 * Result :
467 * Remark :
468 * Status : UNTESTED STUB
469 *
470 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
471 *****************************************************************************/
472
473ODINFUNCTION1(u_long,OS2inet_addr,const char*, cp)
474{
475 return inet_addr((char *)cp);
476}
477
478
479/*****************************************************************************
480 * Name :
481 * Purpose :
482 * Parameters:
483 * Variables :
484 * Result :
485 * Remark :
486 * Status : UNTESTED STUB
487 *
488 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
489 *****************************************************************************/
490
491ODINFUNCTION1(char*,OS2inet_ntoa,struct in_addr,in)
492{
493 return inet_ntoa(in);
494}
495
496
497/*****************************************************************************
498 * Name :
499 * Purpose :
500 * Parameters:
501 * Variables :
502 * Result :
503 * Remark :
504 * Status : UNTESTED STUB
505 *
506 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
507 *****************************************************************************/
508
509ODINFUNCTION2(int,OS2listen,SOCKET,s,
510 int, backlog)
511{
512 int rc = listen(s,backlog);
513
514 if (rc < 0)
515 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
516
517 return rc;
518}
519
520
521/*****************************************************************************
522 * Name :
523 * Purpose :
524 * Parameters:
525 * Variables :
526 * Result :
527 * Remark :
528 * Status : UNTESTED STUB
529 *
530 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
531 *****************************************************************************/
532
533ODINFUNCTION1(u_long,OS2ntohl,u_long,netlong)
534{
535 return ntohl(netlong);
536}
537
538
539/*****************************************************************************
540 * Name :
541 * Purpose :
542 * Parameters:
543 * Variables :
544 * Result :
545 * Remark :
546 * Status : UNTESTED STUB
547 *
548 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
549 *****************************************************************************/
550
551ODINFUNCTION1(u_short,OS2ntohs,u_short,netshort)
552{
553 return ntohs(netshort);
554}
555
556
557/*****************************************************************************
558 * Name :
559 * Purpose :
560 * Parameters:
561 * Variables :
562 * Result :
563 * Remark :
564 * Status : UNTESTED STUB
565 *
566 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
567 *****************************************************************************/
568
569ODINFUNCTION4(int,OS2recv,SOCKET,s,
570 char*, buf,
571 int, len,
572 int, flags)
573{
574 int rc = recv(s,buf,len,flags);
575
576 if (rc < 0)
577 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
578
579 return rc;
580}
581
582
583/*****************************************************************************
584 * Name :
585 * Purpose :
586 * Parameters:
587 * Variables :
588 * Result :
589 * Remark :
590 * Status : UNTESTED STUB
591 *
592 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
593 *****************************************************************************/
594
595ODINFUNCTION6(int,OS2recvfrom,SOCKET, s,
596 char*, buf,
597 int, len,
598 int, flags,
599 PSOCKADDR, from,
600 int*, fromlen)
601{
602 int rc = recvfrom(s,buf,len,flags,from,fromlen);
603
604 if (rc < 0)
605 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
606
607 return rc;
608}
609
610
611/*****************************************************************************
612 * Name :
613 * Purpose :
614 * Parameters:
615 * Variables :
616 * Result :
617 * Remark :
618 * Status : UNTESTED STUB
619 *
620 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
621 *****************************************************************************/
622
623#ifdef VV_BSD_SELECT
624
625ODINFUNCTION5(int,OS2select,int, nfds,
626 Wfd_set*, readfds,
627 Wfd_set*, writefds,
628 Wfd_set*, exceptfds,
629 const struct Wtimeval*, timeout)
630{
631 int rc = select(nfds,
632 (fd_set *)readfds,
633 (fd_set *)writefds,
634 (fd_set *)exceptfds,
635 (timeval *)timeout);
636
637 if (rc == SOCKET_ERROR)
638 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
639
640 return rc;
641}
642
643#else
644# error OS/2-style select not implemented!
645#endif
646
647
648/*****************************************************************************
649 * Name :
650 * Purpose :
651 * Parameters:
652 * Variables :
653 * Result :
654 * Remark :
655 * Status : UNTESTED STUB
656 *
657 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
658 *****************************************************************************/
659
660ODINFUNCTION4(int,OS2send,SOCKET, s,
661 const char*, buf,
662 int, len,
663 int, flags)
664{
665 int rc = send(s,(char *)buf,len,flags);
666
667 if (rc < 0)
668 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
669
670 return rc;
671}
672
673
674/*****************************************************************************
675 * Name :
676 * Purpose :
677 * Parameters:
678 * Variables :
679 * Result :
680 * Remark :
681 * Status : UNTESTED STUB
682 *
683 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
684 *****************************************************************************/
685
686ODINFUNCTION6(int,OS2sendto,SOCKET, s,
687 const char*, buf,
688 int, len,
689 int, flags,
690 const struct sockaddr*, to,
691 int, tolen)
692{
693 int rc = sendto(s,(char *)buf,len,flags,(PSOCKADDR)to,tolen);
694
695 if (rc < 0)
696 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
697
698 return rc;
699}
700
701
702/*****************************************************************************
703 * Name :
704 * Purpose :
705 * Parameters:
706 * Variables :
707 * Result :
708 * Remark :
709 * Status : UNTESTED STUB
710 *
711 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
712 *****************************************************************************/
713
714ODINFUNCTION5(int,OS2setsockopt,SOCKET, s,
715 int, level,
716 int, optname,
717 const char*, optval,
718 int, optlen)
719{
720 struct Wlinger *yy;
721 struct linger xx;
722 int rc;
723
724 if(level == SOL_SOCKET &&
725 optname == SO_LINGER)
726 {
727 yy = (struct Wlinger *)optval;
728 xx.l_onoff = (int)yy->l_onoff;
729 xx.l_linger = (int)yy->l_linger;
730
731 rc = setsockopt(s,level,optname,(char *)&xx,optlen);
732 }
733 else
734 rc = setsockopt(s,level,optname,(char *)optval,optlen);
735
736 if (rc == SOCKET_ERROR)
737 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
738
739 return rc;
740}
741
742
743/*****************************************************************************
744 * Name :
745 * Purpose :
746 * Parameters:
747 * Variables :
748 * Result :
749 * Remark :
750 * Status : UNTESTED STUB
751 *
752 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
753 *****************************************************************************/
754
755ODINFUNCTION2(int,OS2shutdown,SOCKET,s,
756 int, how)
757{
758 int rc = shutdown(s,how);
759
760 if (rc == SOCKET_ERROR)
761 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
762
763 return rc;
764}
765
766
767/*****************************************************************************
768 * Name :
769 * Purpose :
770 * Parameters:
771 * Variables :
772 * Result :
773 * Remark :
774 * Status : UNTESTED STUB
775 *
776 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
777 *****************************************************************************/
778
779ODINFUNCTION3(SOCKET,OS2socket,int,af,
780 int,type,
781 int,protocol)
782{
783 SOCKET rc = socket(af,type,protocol);
784
785 if (rc == INVALID_SOCKET)
786 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
787
788 return rc;
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
804ODINFUNCTION3(WHOSTENT*,OS2gethostbyaddr,const char*, addr,
805 int, len,
806 int, type)
807{
808 WHOSTENT *yy;
809 struct hostent *xx;
810
811 xx = gethostbyaddr((char *)addr,len,type);
812
813 if(xx == NULL)
814 {
815 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
816 return (WHOSTENT *)NULL;
817 }
818
819 whsnt.h_name = xx->h_name;
820 whsnt.h_aliases = xx->h_aliases;
821 whsnt.h_addrtype = (short)xx->h_addrtype;
822 whsnt.h_length = (short)xx->h_length;
823 whsnt.h_addr_list = xx->h_addr_list;
824
825 return &whsnt;
826}
827
828
829/*****************************************************************************
830 * Name :
831 * Purpose :
832 * Parameters:
833 * Variables :
834 * Result :
835 * Remark :
836 * Status : UNTESTED STUB
837 *
838 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
839 *****************************************************************************/
840
841ODINFUNCTION1(WHOSTENT*,OS2gethostbyname,const char*,name)
842{
843 WHOSTENT *yy;
844 struct hostent *xx;
845
846 xx = gethostbyname((char *)name);
847 if(xx == NULL)
848 {
849 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
850 return (WHOSTENT *)NULL;
851 }
852
853 whsnt.h_name = xx->h_name;
854 whsnt.h_aliases = xx->h_aliases;
855 whsnt.h_addrtype = (short)xx->h_addrtype;
856 whsnt.h_length = (short)xx->h_length;
857 whsnt.h_addr_list = xx->h_addr_list;
858
859 return &whsnt;
860}
861
862
863/*****************************************************************************
864 * Name :
865 * Purpose :
866 * Parameters:
867 * Variables :
868 * Result :
869 * Remark :
870 * Status : UNTESTED STUB
871 *
872 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
873 *****************************************************************************/
874
875ODINFUNCTION2(int,OS2gethostname,char *,name,
876 int, namelen)
877{
878 return gethostname(name,namelen);
879}
880
881
882/*****************************************************************************
883 * Name :
884 * Purpose :
885 * Parameters:
886 * Variables :
887 * Result :
888 * Remark :
889 * Status : UNTESTED STUB
890 *
891 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
892 *****************************************************************************/
893
894ODINFUNCTION2(WSERVENT*,OS2getservbyport, int, port,
895 const char*, proto)
896{
897 struct servent *xx;
898
899 xx = getservbyport(port,(char *)proto);
900
901 if(xx == NULL)
902 { // this call doesn't generate an error message
903 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
904 return (WSERVENT *)NULL;
905 }
906
907 wsvnt.s_name = xx->s_name;
908 wsvnt.s_aliases = xx->s_aliases;
909 wsvnt.s_port = (short)xx->s_port;
910 wsvnt.s_proto = xx->s_proto;
911
912 return &wsvnt;
913}
914
915
916/*****************************************************************************
917 * Name :
918 * Purpose :
919 * Parameters:
920 * Variables :
921 * Result :
922 * Remark :
923 * Status : UNTESTED STUB
924 *
925 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
926 *****************************************************************************/
927
928ODINFUNCTION2(WSERVENT*,OS2getservbyname,const char*,name,
929 const char*,proto)
930{
931 WSERVENT *yy;
932 struct servent *xx;
933
934 xx = getservbyname((char *)name,(char *)proto);
935
936 if(xx == NULL)
937 { // this call doesn't generate an error message
938 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
939 return (WSERVENT *)NULL;
940 }
941
942 wsvnt.s_name = xx->s_name;
943 wsvnt.s_aliases = xx->s_aliases;
944 wsvnt.s_port = (short)xx->s_port;
945 wsvnt.s_proto = xx->s_proto;
946
947 return &wsvnt;
948}
949
950
951/*****************************************************************************
952 * Name :
953 * Purpose :
954 * Parameters:
955 * Variables :
956 * Result :
957 * Remark :
958 * Status : UNTESTED STUB
959 *
960 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
961 *****************************************************************************/
962
963ODINFUNCTION1(WPROTOENT*,OS2getprotobynumber,int,proto)
964{
965 struct protoent *xx;
966
967 xx = getprotobynumber(proto);
968
969 if(xx == NULL)
970 {
971 // this call doesn't generate an error message
972 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
973 return (WPROTOENT *)NULL;
974 }
975
976 wptnt.p_name = xx->p_name;
977 wptnt.p_aliases = xx->p_aliases;
978 wptnt.p_proto = (short)xx->p_proto;
979
980 return &wptnt;
981}
982
983
984/*****************************************************************************
985 * Name :
986 * Purpose :
987 * Parameters:
988 * Variables :
989 * Result :
990 * Remark :
991 * Status : UNTESTED STUB
992 *
993 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
994 *****************************************************************************/
995
996ODINFUNCTION1(WPROTOENT*,OS2getprotobyname,const char*,name)
997{
998 struct protoent *xx;
999
1000 xx = getprotobyname((char *)name);
1001
1002 if(xx == NULL)
1003 { // this call doesn't generate an error message
1004 OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
1005 return (WPROTOENT *)NULL;
1006 }
1007
1008 wptnt.p_name = xx->p_name;
1009 wptnt.p_aliases = xx->p_aliases;
1010 wptnt.p_proto = (short)xx->p_proto;
1011
1012 return &wptnt;
1013}
1014
1015
1016/*****************************************************************************
1017 * Name :
1018 * Purpose :
1019 * Parameters:
1020 * Variables :
1021 * Result :
1022 * Remark :
1023 * Status : UNTESTED STUB
1024 *
1025 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1026 *****************************************************************************/
1027
1028ODINFUNCTION2(int,OS2WSAStartup,USHORT, wVersionRequired,
1029 LPWSADATA,lpWsaData)
1030{
1031 APIRET rc;
1032 int ii;
1033
1034 /* Make sure that the version requested is >= 1.1. */
1035 /* The low byte is the major version and the high */
1036 /* byte is the minor version. */
1037
1038 if ( LOBYTE( wVersionRequired ) < 1 ||
1039 ( LOBYTE( wVersionRequired ) == 1 &&
1040 HIBYTE( wVersionRequired ) < 1 )) {
1041 return WSAVERNOTSUPPORTED;
1042 }
1043
1044 /* Since we only support 1.1, set both wVersion and */
1045 /* wHighVersion to 1.1. */
1046
1047 lpWsaData->wVersion = MAKEWORD( 1, 1 );
1048 lpWsaData->wHighVersion = MAKEWORD( 1, 1 );
1049 strcpy(lpWsaData->szDescription,"Win32OS2 WSOCK32.DLL Ver. 1.1");
1050 lpWsaData->iMaxUdpDg = 32767;
1051 lpWsaData->iMaxSockets = 2048;
1052 strcpy(lpWsaData->szSystemStatus,"No Status");
1053
1054 if(sock_init() == 0)
1055 {
1056#ifdef DEBUG
1057 WriteLog("WSOCK32: WSAStartup sock_init returned 0\n");
1058#endif
1059 return 0;
1060 }
1061 else
1062 ii = iTranslateSockErrToWSock(sock_errno());
1063
1064 return ii;
1065}
1066
1067
1068/*****************************************************************************
1069 * Name :
1070 * Purpose :
1071 * Parameters:
1072 * Variables :
1073 * Result :
1074 * Remark :
1075 * Status : UNTESTED STUB
1076 *
1077 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1078 *****************************************************************************/
1079
1080ODINFUNCTION0(int,OS2WSACleanup)
1081{
1082 return 0;
1083}
1084
1085
1086/*****************************************************************************
1087 * Name :
1088 * Purpose :
1089 * Parameters:
1090 * Variables :
1091 * Result :
1092 * Remark :
1093 * Status : UNTESTED STUB
1094 *
1095 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1096 *****************************************************************************/
1097
1098ODINPROCEDURE1(OS2WSASetLastError,int,iError)
1099{
1100 SetLastError(iError);
1101}
1102
1103
1104/*****************************************************************************
1105 * Name :
1106 * Purpose :
1107 * Parameters:
1108 * Variables :
1109 * Result :
1110 * Remark :
1111 * Status : UNTESTED STUB
1112 *
1113 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1114 *****************************************************************************/
1115
1116ODINFUNCTION0(int,OS2WSAGetLastError)
1117{
1118 return GetLastError();
1119}
1120
1121
1122/*****************************************************************************
1123 * Name :
1124 * Purpose :
1125 * Parameters:
1126 * Variables :
1127 * Result :
1128 * Remark :
1129 * Status : UNTESTED STUB
1130 *
1131 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1132 *****************************************************************************/
1133
1134ODINFUNCTION0(int,OS2WSAUnhookBlockingHook)
1135{
1136 dprintf(("WSOCK32: WSAUnhookBlockingHook unimplemented\n"));
1137
1138 return -5000; //WSAUnhookBlockingHook();
1139}
1140
1141
1142/*****************************************************************************
1143 * Name :
1144 * Purpose :
1145 * Parameters:
1146 * Variables :
1147 * Result :
1148 * Remark :
1149 * Status : UNTESTED STUB
1150 *
1151 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1152 *****************************************************************************/
1153
1154ODINFUNCTION1(PROC,OS2WSASetBlockingHook,PROC,lpBlockFund)
1155{
1156 dprintf(("WSOCK32: WSASetBlockingHook Unimplemented\n"));
1157 return (PROC)NULL;
1158}
1159
1160
1161/*****************************************************************************
1162 * Name :
1163 * Purpose :
1164 * Parameters:
1165 * Variables :
1166 * Result :
1167 * Remark :
1168 * Status : UNTESTED STUB
1169 *
1170 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1171 *****************************************************************************/
1172
1173ODINFUNCTION0(int,OS2WSACancelBlockingCall)
1174{
1175 dprintf(("WSOCK32: WSACancelBlockingCall unimplemented\n"));
1176
1177 return -5000; //WSACancelBlockingCall();
1178}
1179
1180
1181/*****************************************************************************
1182 * Name :
1183 * Purpose :
1184 * Parameters:
1185 * Variables :
1186 * Result :
1187 * Remark :
1188 * Status : UNTESTED STUB
1189 *
1190 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1191 *****************************************************************************/
1192
1193ODINFUNCTION4(int, OS2WSARecvEx, SOCKET, s,
1194 char FAR*, buf,
1195 int, len,
1196 int FAR *,flags)
1197{
1198 dprintf(("WSOCK32: WSARecvEx not implemented.\n"));
1199
1200// return WSARecvEx(s,buf,len,flags);
1201 return 0;
1202}
1203
1204
1205/*****************************************************************************
1206 * Name :
1207 * Purpose :
1208 * Parameters:
1209 * Variables :
1210 * Result :
1211 * Remark :
1212 * Status : UNTESTED STUB
1213 *
1214 * Author : Patrick Haller [Tue, 1998/06/16 23:00]
1215 *****************************************************************************/
1216
1217ODINPROCEDURE2(OS2s_perror, char*, pszMessage,
1218 void*, pUnknown)
1219{
1220 perror(pszMessage);
1221}
1222
1223
Note: See TracBrowser for help on using the repository browser.