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

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

Fix: socket operation return codes

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