| 183 | } |
| 184 | |
| 185 | int FCEUD_NetworkConnect(void) |
| 186 | { |
| 187 | WSADATA WSAData; |
| 188 | SOCKADDR_IN sockin; /* I want to play with fighting robots. */ /* clack clack clack razzzzzzzzzz */ |
| 189 | SOCKET TSocket; |
| 190 | int netdivisor; |
| 191 | |
| 192 | if(WSAStartup(MAKEWORD(1,1),&WSAData)) |
| 193 | { |
| 194 | NetStatAdd("*** Error initializing WIndows Sockets."); |
| 195 | return(0); |
| 196 | } |
| 197 | wsainit=1; |
| 198 | |
| 199 | if( (TSocket=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) |
| 200 | { |
| 201 | WSE("Error creating stream socket."); |
| 202 | FCEUD_NetworkClose(); |
| 203 | return(0); |
| 204 | } |
| 205 | |
| 206 | memset(&sockin,0,sizeof(sockin)); |
| 207 | sockin.sin_family=AF_INET; |
| 208 | |
| 209 | { |
| 210 | struct hostent *phostentb; |
| 211 | unsigned long hadr; |
| 212 | int sockin_len; |
| 213 | |
| 214 | sockin.sin_port=0; |
| 215 | sockin.sin_addr.s_addr=INADDR_ANY; |
| 216 | sockin_len=sizeof(sockin); |
| 217 | |
| 218 | hadr=inet_addr(netplayhost); |
| 219 | |
| 220 | if(hadr!=INADDR_NONE) |
| 221 | sockin.sin_addr.s_addr=hadr; |
| 222 | else |
| 223 | { |
| 224 | NetStatAdd("*** Looking up host name..."); |
| 225 | if(!(phostentb=gethostbyname((const char *)netplayhost))) |
| 226 | { |
| 227 | WSE("Error getting host network information."); |
| 228 | closesocket(TSocket); |
| 229 | FCEUD_NetworkClose(); |
| 230 | return(0); |
| 231 | } |
| 232 | memcpy((char *)&sockin.sin_addr,((PHOSTENT)phostentb)->h_addr,((PHOSTENT)phostentb)->h_length); |
| 233 | } |
| 234 | |
| 235 | sockin.sin_port=htons(remotetport); |
| 236 | NetStatAdd("*** Connecting to remote host..."); |
| 237 | if(connect(TSocket,(PSOCKADDR)&sockin,sizeof(sockin))==SOCKET_ERROR) |
| 238 | { |
| 239 | WSE("Error connecting to remote host."); |
| 240 | closesocket(TSocket); |
| 241 | FCEUD_NetworkClose(); |
| 242 | return(0); |
no test coverage detected