emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/w32.c


From: Jason Rumney
Subject: [Emacs-diffs] Changes to emacs/src/w32.c
Date: Fri, 03 May 2002 16:40:04 -0400

Index: emacs/src/w32.c
diff -c emacs/src/w32.c:1.74 emacs/src/w32.c:1.75
*** emacs/src/w32.c:1.74        Mon Apr 29 21:02:01 2002
--- emacs/src/w32.c     Fri May  3 16:40:03 2002
***************
*** 84,89 ****
--- 84,90 ----
  #undef gethostname
  #undef gethostbyname
  #undef getservbyname
+ #undef getpeername
  #undef shutdown
  #undef setsockopt
  #undef listen
***************
*** 2424,2430 ****
  int (PASCAL *pfn_gethostname) (char * name, int namelen);
  struct hostent * (PASCAL *pfn_gethostbyname) (const char * name);
  struct servent * (PASCAL *pfn_getservbyname) (const char * name, const char * 
proto);
! 
  int (PASCAL *pfn_setsockopt) (SOCKET s, int level, int optname,
                              const char * optval, int optlen);
  int (PASCAL *pfn_listen) (SOCKET s, int backlog);
--- 2425,2431 ----
  int (PASCAL *pfn_gethostname) (char * name, int namelen);
  struct hostent * (PASCAL *pfn_gethostbyname) (const char * name);
  struct servent * (PASCAL *pfn_getservbyname) (const char * name, const char * 
proto);
! int (PASCAL *pfn_getpeername) (SOCKET s, struct sockaddr *addr, int * 
namelen);
  int (PASCAL *pfn_setsockopt) (SOCKET s, int level, int optname,
                              const char * optval, int optlen);
  int (PASCAL *pfn_listen) (SOCKET s, int backlog);
***************
*** 2504,2509 ****
--- 2505,2511 ----
        LOAD_PROC( gethostname );
        LOAD_PROC( gethostbyname );
        LOAD_PROC( getservbyname );
+       LOAD_PROC( getpeername );
        LOAD_PROC( WSACleanup );
        LOAD_PROC( setsockopt );
        LOAD_PROC( listen );
***************
*** 2923,2928 ****
--- 2925,2952 ----
  }
  
  int
+ sys_getpeername (int s, struct sockaddr *addr, int * namelen)
+ {
+   if (winsock_lib == NULL)
+     {
+       h_errno = ENETDOWN;
+       return SOCKET_ERROR;
+     }
+ 
+   check_errno ();
+   if (fd_info[s].flags & FILE_SOCKET)
+     {
+       int rc = pfn_getpeername (SOCK_HANDLE (s), addr, namelen);
+       if (rc == SOCKET_ERROR)
+       set_errno ();
+       return rc;
+     }
+   h_errno = ENOTSOCK;
+   return SOCKET_ERROR;
+ }
+ 
+ 
+ int
  sys_shutdown (int s, int how)
  {
    if (winsock_lib == NULL)
***************
*** 3074,3079 ****
--- 3098,3137 ----
    return SOCKET_ERROR;
  }
  
+ /* Windows does not have an fcntl function.  Provide an implementation
+    solely for making sockets non-blocking.  */
+ int
+ fcntl (int s, int cmd, int options)
+ {
+   if (winsock_lib == NULL)
+     {
+       h_errno = ENETDOWN;
+       return -1;
+     }
+ 
+   check_errno ();
+   if (fd_info[s].flags & FILE_SOCKET)
+     {
+       if (cmd == F_SETFL && options == O_NDELAY)
+       {
+         unsigned long nblock = 1;
+         int rc = pfn_ioctlsocket (SOCK_HANDLE (s), FIONBIO, &nblock);
+         if (rc == SOCKET_ERROR)
+           set_errno();
+         /* Keep track of the fact that we set this to non-blocking.  */
+         fd_info[s].flags |= FILE_NDELAY;
+         return rc;
+       }
+       else
+       {
+         h_errno = EINVAL;
+         return SOCKET_ERROR;
+       }
+     }
+   h_errno = ENOTSOCK;
+   return SOCKET_ERROR;
+ }
+ 
  #endif /* HAVE_SOCKETS */
  
  
***************
*** 3257,3263 ****
      }
  #ifdef HAVE_SOCKETS
    else if (fd_info[fd].flags & FILE_SOCKET)
!     rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0);
  #endif
    
    if (rc == sizeof (char))
--- 3315,3334 ----
      }
  #ifdef HAVE_SOCKETS
    else if (fd_info[fd].flags & FILE_SOCKET)
!     {
!       unsigned long nblock = 0;
!       /* We always want this to block, so temporarily disable NDELAY.  */
!       if (fd_info[fd].flags & FILE_NDELAY)
!       pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock);
! 
!       rc = pfn_recv (SOCK_HANDLE (fd), &cp->chr, sizeof (char), 0);
! 
!       if (fd_info[fd].flags & FILE_NDELAY)
!       {
!         nblock = 1;
!         pfn_ioctlsocket (SOCK_HANDLE (fd), FIONBIO, &nblock);
!       }
!     }
  #endif
    
    if (rc == sizeof (char))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]