⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsock.h

📁 可用于嵌入式编程学习
💻 H
字号:
/**********************************************************************/
/**                        Microsoft Windows                         **/
/**Copyright (c) 1993-2000 Microsoft Corporation.  All rights reserved.**/
/**********************************************************************/

/*
    wsock.h

    WSOCK.386 VxD service definitions.


*/


#ifndef _WSOCK_H_
#define _WSOCK_H_

//
//  Version numbers.
//

#define WSOCK_Ver_Major         1
#define WSOCK_Ver_Minor         0


//
//  The current provider interface version number.  Increment
//  this constant after any change that effects the provider
//  interface.
//

#define WSOCK_INTERFACE_VERSION 0x80000001

//
//  All FD_* events.
//

#define FD_ALL  (FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE)

// moved the following from DLL
#define READ_EVENTS     (FD_READ | FD_CLOSE | FD_ACCEPT)
#define WRITE_EVENTS    (FD_WRITE | FD_CONNECT)
#define EXCEPT_EVENTS   (FD_OOB | FD_FAILED_CONNECT)
//
//  This "special" FD_ event is used in select so that we may
//  synthesize proper exceptfds for failed connection attempts.
//

#define FD_FAILED_CONNECT   0x0100


//
//  Infinite wait time for send/recv timeout.
//

#define SOCK_IO_TIME            (DWORD)-1L

//
//  A list of socket/event mask pairs.  A pointer to an array
//  of these structures is passed to WsCreateMultipleNotify to
//  create multiple notification objects.
//


typedef struct _SOCK_LIST {
	DWORD			hSocket;			// handle to socket passed in from dll layer
    struct _SOCK_INFO	*Socket;             // the target socket
    DWORD   	    EventMask;          // events the client is interested in
    DWORD	      	Context;            // user-defined context value (handle?)
				// no need to confuse people Context is just a SOCKET
} SOCK_LIST, *LPSOCK_LIST, *PSOCK_LIST;

// added for select funtionality
typedef struct _PEGNOTIFY {
	LIST_ENTRY			PerSocketList;
	LIST_ENTRY			GlobalList;		// we may need this later for WSAClose
	struct _SOCK_INFO	*pSocket;
	DWORD				EventMask;
	HANDLE				hEvent;
} PEGNOTIFY, * PPEGNOTIFY;



#ifndef SOCKHAND_DEFINED
DECLARE_HANDLE(SOCKHAND);
typedef SOCKHAND *PSOCKHAND;
#define SOCKHAND_DEFINED
#endif


// Include the AFD functions.
#include "afdfunc.h"

//
// Socket Handle API calls
//
#define WINSOCK_CALL(type, api, args)	(*(type (*) args)IMPLICIT_CALL(HT_SOCKET, api))


#define 	AFDCloseSocket WINSOCK_CALL (DWORD, 0, 			\
					(SOCKHAND     Socket))

#define 	AFDAccept WINSOCK_CALL (DWORD, 2, 				\
					 (SOCKHAND   ListeningSocket, 			\
					  PSOCKHAND  ConnectedSocket,			\
					  LPSOCKADDR Address,					\
					  LPDWORD	 AddrLen,					\
					  CRITICAL_SECTION	*pDllCS))

#define 	AFDBind WINSOCK_CALL (DWORD, 3, \
					(SOCKHAND     Socket, \
					 LPSOCKADDR   Address, \
					 DWORD        AddressLength, \
					 CRITICAL_SECTION	*pDllCS))

#define 	AFDConnect WINSOCK_CALL (DWORD, 4, \
					(SOCKHAND     Socket, \
					 LPSOCKADDR   Address, \
					 DWORD        AddressLength, \
					 CRITICAL_SECTION	*pDllCS))
							 
#define 	AFDIoctl WINSOCK_CALL (DWORD, 5, \
					(SOCKHAND      Socket, \
					 DWORD         Command, \
					 LPDWORD       Param, \
					 CRITICAL_SECTION	*pDllCS))

#define 	AFDListen WINSOCK_CALL (DWORD, 6, \
					(SOCKHAND      Socket, \
					 DWORD         Backlog,	\
					 CRITICAL_SECTION	*pDllCS))
		 
#define 	AFDRecv WINSOCK_CALL (DWORD, 7, \
					(SOCKHAND      Socket, \
					 LPBYTE        Buffer, \
					 DWORD         BufferLength, \
					 DWORD         Flags, \
					 LPSOCKADDR    Address, \
					 LPDWORD       AddressLength, \
					 LPDWORD       BytesReceived, \
					 CRITICAL_SECTION	*pDllCS))

#define 	AFDSend WINSOCK_CALL (DWORD, 8, \
					(SOCKHAND      Socket, \
					 LPBYTE        Buffer, \
					 DWORD         BufferLength, \
					 DWORD         Flags, \
					 LPSOCKADDR    Address, \
					 DWORD         AddressLength, \
					 LPDWORD       BytesSent, \
					 CRITICAL_SECTION	*pDllCS))
							 
#define 	AFDShutdown WINSOCK_CALL (DWORD, 9,				\
					(SOCKHAND      Socket,					\
					 DWORD         How,						\
					 CRITICAL_SECTION	*pDllCS))
					 
#define 	AFDGetsockname WINSOCK_CALL (DWORD, 10,			\
					(SOCKHAND      Socket,					\
					 LPSOCKADDR    Address,					\
					 LPDWORD       AddressLength,			\
					 CRITICAL_SECTION	*pDllCS))

#define 	AFDGetpeername WINSOCK_CALL (DWORD, 11,			\
					(SOCKHAND      Socket,					\
					 LPSOCKADDR    Address,					\
					 LPDWORD       AddressLength,			\
					 CRITICAL_SECTION	*pDllCS))

#define		AFDGetSockOpt WINSOCK_CALL (DWORD, 12,			\
					(SOCKHAND     Socket,					\
					 DWORD		  Level,					\
					 DWORD		  OptionName,				\
					 LPVOID		  Buffer,					\
					 LPDWORD	  BufferLength,				\
					 CRITICAL_SECTION	*pDllCS))

#define		AFDSetSockOpt WINSOCK_CALL (DWORD, 13,			\
					(SOCKHAND     Socket,					\
					 DWORD		  Level,					\
					 DWORD		  OptionName,				\
					 LPVOID		  Buffer,					\
					 DWORD		  BufferLength,				\
					 CRITICAL_SECTION	*pDllCS))
					 

#define		AFDWakeup WINSOCK_CALL (DWORD, 14, \
					(SOCKHAND		Socket, \
					DWORD			Event, \
					DWORD			Status, \
					CRITICAL_SECTION	*pDllCS))


#endif  // _WSOCK_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -