| tFixes for new networking code with Windows Sockets - vaccinewars - be a doctor… | |
| git clone git://src.adamsgaard.dk/vaccinewars | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 275f3dd7e8490d3e45d805a7ce1736d5d17f5d7d | |
| parent df1ddce3e211ed4a7aa28dde40ef79dc44bd53b1 | |
| Author: Ben Webb <[email protected]> | |
| Date: Sun, 12 Nov 2000 15:16:29 +0000 | |
| Fixes for new networking code with Windows Sockets | |
| Diffstat: | |
| M config.h.in | 3 +++ | |
| M src/dopeos.c | 2 ++ | |
| M src/dopeos.h | 5 +++++ | |
| M src/message.c | 15 +++++++++++---- | |
| M src/win32_client.c | 12 +++++++----- | |
| 5 files changed, 28 insertions(+), 9 deletions(-) | |
| --- | |
| diff --git a/config.h.in b/config.h.in | |
| t@@ -99,6 +99,9 @@ | |
| /* Define if you have the getcwd function. */ | |
| #undef HAVE_GETCWD | |
| +/* Define if you have the gethostbyname function. */ | |
| +#undef HAVE_GETHOSTBYNAME | |
| + | |
| /* Define if you have the getpagesize function. */ | |
| #undef HAVE_GETPAGESIZE | |
| diff --git a/src/dopeos.c b/src/dopeos.c | |
| t@@ -274,6 +274,7 @@ int bselect(int nfds,fd_set *readfds,fd_set *writefds,fd_s… | |
| } | |
| #if NETWORKING | |
| +int GetSocketError() { return WSAGetLastError(); } | |
| void fcntl(SOCKET s,int fsetfl,long cmd) { | |
| unsigned long param=1; | |
| ioctlsocket(s,cmd,¶m); | |
| t@@ -323,6 +324,7 @@ int bgetch() { | |
| #endif | |
| #if NETWORKING | |
| +int GetSocketError() { return errno; } | |
| void StartNetworking() {} | |
| void StopNetworking() {} | |
| void SetReuse(int sock) { | |
| diff --git a/src/dopeos.h b/src/dopeos.h | |
| t@@ -116,6 +116,7 @@ int bselect(int nfds,fd_set *readfds,fd_set *writefds,fd_s… | |
| struct timeval *tm); | |
| #if NETWORKING | |
| +int GetSocketError(); | |
| void fcntl(SOCKET s,int fsetfl,long cmd); | |
| #define CloseSocket(sock) closesocket(sock) | |
| void StartNetworking(); | |
| t@@ -133,6 +134,7 @@ void SetReuse(SOCKET sock); | |
| #include <arpa/inet.h> | |
| #include <netdb.h> | |
| #include <unistd.h> | |
| +#include <errno.h> | |
| #endif /* NETWORKING */ | |
| /* Only include sys/wait.h on those systems which support it */ | |
| t@@ -172,9 +174,12 @@ int bgetch(); | |
| #if NETWORKING | |
| #define CloseSocket(sock) close(sock) | |
| +int GetSocketError(); | |
| void StartNetworking(); | |
| void StopNetworking(); | |
| void SetReuse(int sock); | |
| +#define WSAECONNRESET EPIPE | |
| +#define WSAEWOULDBLOCK EINPROGRESS | |
| #endif /* NETWORKING */ | |
| #endif /* CYGWIN */ | |
| diff --git a/src/message.c b/src/message.c | |
| t@@ -29,12 +29,14 @@ | |
| #include <fcntl.h> | |
| #endif | |
| +#ifndef CYGWIN | |
| #include <sys/types.h> | |
| #include <sys/socket.h> | |
| +#endif | |
| + | |
| #include <string.h> | |
| #include <stdlib.h> | |
| #include <glib.h> | |
| -#include <errno.h> | |
| #include "dopeos.h" | |
| #include "dopewars.h" | |
| #include "serverside.h" | |
| t@@ -370,7 +372,7 @@ gboolean WriteConnectionBufferToWire(Player *Play) { | |
| BytesSent=send(Play->fd,&conn->Data[CurrentPosition], | |
| conn->DataPresent-CurrentPosition,0); | |
| if (BytesSent==SOCKET_ERROR) { | |
| - if (errno==EPIPE) return FALSE; | |
| + if (GetSocketError()==WSAECONNRESET) return FALSE; | |
| break; | |
| } else { | |
| CurrentPosition+=BytesSent; | |
| t@@ -704,7 +706,7 @@ char *SetupNetwork(gboolean NonBlocking) { | |
| if (NonBlocking) fcntl(ClientSock,F_SETFL,O_NONBLOCK); | |
| if (connect(ClientSock,(struct sockaddr *)&ClientAddr, | |
| sizeof(struct sockaddr))==-1) { | |
| - if (errno==EINPROGRESS) return NULL; | |
| + if (GetSocketError()==WSAEWOULDBLOCK) return NULL; | |
| CloseSocket(ClientSock); | |
| return NoConnect; | |
| } else { | |
| t@@ -715,9 +717,13 @@ char *SetupNetwork(gboolean NonBlocking) { | |
| } | |
| char *FinishSetupNetwork() { | |
| - socklen_t optlen; | |
| +#ifdef CYGWIN | |
| + Client=Network=TRUE; | |
| + return NULL; | |
| +#else | |
| int optval; | |
| static char NoConnect[]= N_("Connection refused or no server present"); | |
| + socklen_t optlen; | |
| optlen=sizeof(optval); | |
| if (getsockopt(ClientSock,SOL_SOCKET,SO_ERROR,&optval,&optlen)==-1) { | |
| t@@ -729,6 +735,7 @@ char *FinishSetupNetwork() { | |
| } else { | |
| return NoConnect; | |
| } | |
| +#endif | |
| } | |
| #endif /* NETWORKING */ | |
| diff --git a/src/win32_client.c b/src/win32_client.c | |
| t@@ -32,6 +32,7 @@ | |
| #include "dopeos.h" | |
| #include "dopewars.h" | |
| +#include "tstring.h" | |
| #include "curses_client.h" | |
| #include "win32_client.h" | |
| #include "message.h" | |
| t@@ -95,6 +96,8 @@ static void DisplaySpyReports(Player *Play); | |
| static void CreateStats(HWND hwnd,struct STATS *Stats, | |
| gboolean CreateEdit,gboolean CreateButtons); | |
| static void SizeStats(HWND hwnd,struct STATS *Stats,RECT *rect); | |
| +static void SizeStats(HWND hwnd,struct STATS *Stats,RECT *rect); | |
| +static void SizeStats(HWND hwnd,struct STATS *Stats,RECT *rect); | |
| static void ShowStats(struct STATS *Stats,int State); | |
| static void LogMessage(const gchar *log_domain,GLogLevelFlags log_level, | |
| t@@ -104,7 +107,6 @@ static void LogMessage(const gchar *log_domain,GLogLevelFl… | |
| } | |
| static void DisplayStats(Player *Play,struct STATS *Stats) { | |
| - gchar *prstr,*caps; | |
| GString *text; | |
| text=g_string_new(""); | |
| t@@ -166,8 +168,8 @@ void UpdateInventory(HWND HereList,HWND CarriedList, | |
| Player *Play; | |
| gint i; | |
| price_t price; | |
| - gchar *name,*prstr,*text; | |
| LRESULT addresult; | |
| + gchar *name,*text; | |
| gboolean CanBuy=FALSE,CanSell=FALSE,CanDrop=FALSE; | |
| Play=ClientData.Play; | |
| t@@ -754,14 +756,15 @@ BOOL CALLBACK TransferWndProc(HWND hwnd,UINT msg,UINT wP… | |
| static char Type; | |
| HWND MoneyWnd; | |
| int buflen; | |
| + gchar *prstr; | |
| price_t money; | |
| - gchar *text,*prstr; | |
| + gchar *text; | |
| switch(msg) { | |
| case WM_INITDIALOG: | |
| Type=(char)lParam; | |
| text=dpg_strdup_printf("Cash: %P",ClientData.Play->Cash); | |
| SetDlgItemText(hwnd,ST_MONEY,text); | |
| - g_free(text); g_free(prstr); | |
| + g_free(text); | |
| if (Type==C_BANK) { | |
| CheckDlgButton(hwnd,RB_WITHDRAW,BST_CHECKED); | |
| text=dpg_strdup_printf("Bank: %P",ClientData.Play->Bank); | |
| t@@ -1775,7 +1778,6 @@ int APIENTRY Win32Loop(HINSTANCE hInstance,HINSTANCE hPr… | |
| while(GetMessage(&msg,NULL,0,0)) { | |
| if ((!PlayerListWnd || !IsDialogMessage(PlayerListWnd,&msg)) && | |
| (!TalkWnd || !IsDialogMessage(TalkWnd,&msg)) && | |
| - (!InventoryWnd || !IsDialogMessage(InventoryWnd,&msg)) && | |
| (!FightWnd || !IsDialogMessage(FightWnd,&msg)) && | |
| (!GunShopWnd || !IsDialogMessage(GunShopWnd,&msg)) && | |
| (!SpyReportsWnd || !IsDialogMessage(SpyReportsWnd,&msg)) && |