#include <simgear/compiler.h>
-#if !defined(_MSC_VER)
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
# include <sys/time.h> // select()
# include <sys/types.h> // socket(), bind(), select(), accept()
# include <sys/socket.h> // socket(), bind(), listen(), accept()
port_str(port),
save_len(0)
{
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW32__)
if (!wsock_init && !wsastartup()) {
SG_LOG( SG_IO, SG_ALERT, "Winsock not available");
}
SGSocket::SocketType SGSocket::make_server_socket () {
struct sockaddr_in name;
-#if defined( __CYGWIN__ ) || defined( __CYGWIN32__ ) || defined( sgi ) || defined( _MSC_VER )
+#if defined( __CYGWIN__ ) || defined( __CYGWIN32__ ) || defined( sgi ) || defined( _MSC_VER ) || defined(__MINGW32__)
int length;
#else
socklen_t length;
// get the hosts official name/info
hp = gethostbyname( hostname.c_str() );
+ if (hp == NULL) {
+ SG_LOG( SG_IO, SG_ALERT, "Error: hostname lookup failed" );
+ return INVALID_SOCKET;
+ }
// Connect this socket to the host and the port specified on the
// command line
// Wrapper functions
size_t SGSocket::readsocket( int fd, void *buf, size_t count ) {
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW32__)
return ::recv( fd, (char *)buf, count, 0 );
#else
return ::read( fd, buf, count );
}
size_t SGSocket::writesocket( int fd, const void *buf, size_t count ) {
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW32__)
return ::send( fd, (const char*)buf, count, 0 );
#else
return ::write( fd, buf, count );
#endif
}
-#if !defined(_MSC_VER)
+#if !defined(_MSC_VER) && !defined(__MINGW32__)
int SGSocket::closesocket( int fd ) {
return ::close( fd );
}
return 0;
}
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW32__)
u_long arg = 1;
if (ioctlsocket( sock, FIONBIO, &arg ) != 0) {
int error_code = WSAGetLastError();
return true;
}
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW32__)
bool SGSocket::wsock_init = false;