home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / mint / netlib / lib / sockpair.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-27  |  1.1 KB  |  62 lines

  1. /*
  2.  *    socketpair() emulation for MiNT-Net, (w) '93, kay roemer.
  3.  */
  4.  
  5. #include "socklib.h"
  6. #ifdef KERNEL
  7. #include "kerbind.h"
  8. #else
  9. #include <osbind.h>
  10. #include <mintbind.h>
  11. #endif
  12. #include "file.h"
  13. #include "sys/socket.h"
  14. #include "mintsock.h"
  15.  
  16. #define SOCKDEV        "u:\\dev\\socket"
  17.  
  18. #ifndef KERNEL
  19. extern int errno;
  20. #endif
  21.  
  22. int
  23. socketpair (domain, type, proto, fds)
  24.     int domain, type, proto, fds[2];
  25. {
  26.     struct socketpair_cmd cmd;
  27.     int sockfd1, sockfd2;
  28.  
  29. #ifdef KERNEL
  30.     sockfd1 = f_open (SOCKDEV, O_RDWR);
  31.     if (sockfd1 < 0) return sockfd1;
  32. #else
  33.     sockfd1 = Fopen (SOCKDEV, O_RDWR);
  34.     if (sockfd1 < 0) {
  35.         errno = -sockfd1;
  36.         return -1;
  37.     }
  38. #endif
  39.     cmd.cmd =    SOCKETPAIR_CMD;
  40.     cmd.domain =    domain;
  41.     cmd.type =    type;
  42.     cmd.protocol =    proto;
  43.  
  44. #ifdef KERNEL
  45.     sockfd2 = f_cntl (sockfd1, (long)&cmd, SOCKETCALL);
  46.     if (sockfd2 < 0) {
  47.         f_close (sockfd1);
  48.         return sockfd2;
  49.     }
  50. #else
  51.     sockfd2 = Fcntl (sockfd1, (long)&cmd, SOCKETCALL);
  52.     if (sockfd2 < 0) {
  53.         errno = -sockfd2;
  54.         Fclose (sockfd1);
  55.         return -1;
  56.     }
  57. #endif
  58.     fds[0] = sockfd1;
  59.     fds[1] = sockfd2;
  60.     return 0;
  61. }
  62.