4 #include "winsockdrv_local.h"
7 const T_DRVOBJ_METHODS WinSockDrv_Methods =
21 void WinSockDrv_Create(C_WINSOCKDRV *self, int iPortNum, int iIntNum, int iBufSize)
24 struct sockaddr_in addr;
27 DrvObj_Create(&self->DrvObj, &WinSockDrv_Methods);
29 WSAStartup(MAKEWORD(2,0), &wsaData);
31 self->sock0 = socket(AF_INET, SOCK_STREAM, 0);
33 addr.sin_family = AF_INET;
34 addr.sin_port = htons((u_short)iPortNum);
35 addr.sin_addr.S_un.S_addr = INADDR_ANY;
37 bind(self->sock0, (struct sockaddr *)&addr, sizeof(addr));
39 listen(self->sock0, 5);
44 void WinSockDrv_Delete(C_DRVOBJ *pDrvObj)
51 HANDLE WinSockDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
55 struct sockaddr_in client;
59 self = (C_WINSOCKDRV *)pDrvObj;
61 /* create file descriptor */
62 if ( (pFileObj = SysMem_Alloc(sizeof(*pFileObj))) == NULL )
66 FileObj_Create(pFileObj, pDrvObj, NULL);
69 if ( self->iOpenCount++ == 0 )
72 self->sock = accept(self->sock0, (struct sockaddr *)&client, &len);
75 return (HANDLE)pFileObj;
80 FILE_ERR WinSockDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
85 self = (C_WINSOCKDRV *)pDrvObj;
87 if ( --self->iOpenCount == 0 )
89 closesocket(self->sock);
96 FILE_ERR WinSockDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, const void *pInBuf, FILE_SIZE InSize, void *pOutBuf, FILE_SIZE OutSize)
102 FILE_POS WinSockDrv_Seek(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign)
109 FILE_SIZE WinSockDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
114 self = (C_WINSOCKDRV *)pDrvObj;
116 return recv(self->sock, pBuf, Size, 0);
121 FILE_SIZE WinSockDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
126 self = (C_WINSOCKDRV *)pDrvObj;
128 return send(self->sock, pData, Size, 0);
132 FILE_ERR WinSockDrv_Flush(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)