Patch: 006-sock_fd_type.diff

Martin Wilck Martin.Wilck at fujitsu-siemens.com
Mon Jan 7 09:40:10 CST 2002


#6 in series.

Patch file:	006-sock_fd_type.diff
Purpose:	Fetch socket type with fd
Created:	2002-01-07
Applies:	CVS 2002-01-07
		(with 005-recv.diff applied)

Add functionality to retrieve the socket type & flags together with the
socket fd if needed, like in FILE_GetUnixHandleType().
Preparation for implementing overlapped IO on sockets.

include/file.h:
	include prototype for FILE_GetUnixHandleType().

dlls/winsock/socket.c:
	_get_sock_fd_type(): 	New function, calls FILE_GetUnixHandleType().
	_get_sock_fd():		Now a wrapper around _get_sock_fd_type().
	WSARecvFrom():		Call _get_sock_fd_type() to get socket flags.

Martin Wilck <Martin.Wilck at Fujitsu-Siemens.com>

diff -ruX diffignore CVS/wine/dlls/winsock/socket.c MW/wine/dlls/winsock/socket.c
--- CVS/wine/dlls/winsock/socket.c	Mon Jan  7 15:32:22 2002
+++ MW/wine/dlls/winsock/socket.c	Mon Jan  7 15:34:19 2002
@@ -241,14 +241,19 @@

 static char* check_buffer(int size);

-static int _get_sock_fd(SOCKET s)
+static int _get_sock_fd_type (SOCKET s, LPDWORD type)
 {
-    int fd = FILE_GetUnixHandle( s, GENERIC_READ );
+    int fd = FILE_GetUnixHandleType ( s, GENERIC_READ, type );
     if (fd == -1)
         FIXME("handle %d is not a socket (GLE %ld)\n",s,GetLastError());
     return fd;
 }

+static int _get_sock_fd (SOCKET s)
+{
+    return _get_sock_fd_type (s, NULL);
+}
+
 static void _enable_event(SOCKET s, unsigned int event,
 			  unsigned int sstate, unsigned int cstate)
 {
@@ -3367,13 +3372,15 @@
     struct iovec* iovec;
     struct msghdr msghdr;
     int fd, i, length, err = WSAENOTSOCK;
+    DWORD type;

-    TRACE("socket %04x, wsabuf %p, nbufs %ld, flags %ld, from %p, fromlen %ld, ovl %p, func %p\n",
+    fd = _get_sock_fd_type (s, &type);
+
+    TRACE("socket %04x, wsabuf %p, nbufs %ld, flags %ld, from %p, fromlen %ld, ovl %p, func %p, fd %d, type %lx\n",
           s, lpBuffers, dwBufferCount, *lpFlags, lpFrom,
           (lpFromlen ? *lpFromlen : -1L),
-          lpOverlapped, lpCompletionRoutine);
-
-    fd = _get_sock_fd(s);
+          lpOverlapped, lpCompletionRoutine,
+          fd, type);

     if (fd == -1)
     {
diff -ruX diffignore CVS/wine/include/file.h MW/wine/include/file.h
--- CVS/wine/include/file.h	Mon Jan  7 13:59:51 2002
+++ MW/wine/include/file.h	Mon Jan  7 15:30:45 2002
@@ -74,6 +74,7 @@
 extern int FILE_strncasecmp( const char *str1, const char *str2, int len );
 extern void FILE_SetDosError(void);
 extern HANDLE FILE_DupUnixHandle( int fd, DWORD access, BOOL inherit );
+extern int FILE_GetUnixHandleType ( HANDLE handle, DWORD access, LPDWORD type );
 extern int FILE_GetUnixHandle( HANDLE handle, DWORD access );
 extern BOOL FILE_Stat( LPCSTR unixName, BY_HANDLE_FILE_INFORMATION *info );
 extern HFILE16 FILE_Dup2( HFILE16 hFile1, HFILE16 hFile2 );








More information about the wine-patches mailing list