#ifndef __GSOCKET_STANDALONE__
+# include "wx/defs.h"
# include "wx/setup.h"
#endif
#include <winsock.h>
-
/* if we use configure for MSW SOCKLEN_T will be already defined */
#ifndef SOCKLEN_T
# define SOCKLEN_T int
socket->m_cbacks[i] = NULL;
}
socket->m_detected = 0;
- socket->m_local = NULL;
- socket->m_peer = NULL;
+ socket->m_local = NULL;
+ socket->m_peer = NULL;
socket->m_error = GSOCK_NOERROR;
- socket->m_server = FALSE;
+ socket->m_server = FALSE;
socket->m_stream = TRUE;
socket->m_non_blocking = FALSE;
socket->m_timeout.tv_sec = 10 * 60; /* 10 minutes */
if (!success)
{
free(socket);
- return NULL;
+ socket = NULL;
}
return socket;
}
+void GSocket_close(GSocket *socket)
+{
+ _GSocket_Disable_Events(socket);
+ closesocket(socket->m_fd);
+ socket->m_fd = INVALID_SOCKET;
+}
+
void GSocket_destroy(GSocket *socket)
{
assert(socket != NULL);
if (socket->m_fd != INVALID_SOCKET)
{
shutdown(socket->m_fd, 2);
- closesocket(socket->m_fd);
- socket->m_fd = INVALID_SOCKET;
+ GSocket_close(socket);
}
/* Disable GUI callbacks */
socket->m_cbacks[evt] = NULL;
socket->m_detected = GSOCK_LOST_FLAG;
- _GSocket_Disable_Events(socket);
}
/* Address handling */
* Sets up this socket as a server. The local address must have been
* set with GSocket_SetLocal() before GSocket_SetServer() is called.
* Returns GSOCK_NOERROR on success, one of the following otherwise:
- *
+ *
* Error codes:
* GSOCK_INVSOCK - the socket is in use.
* GSOCK_INVADDR - the local address has not been set.
- * GSOCK_IOERR - low-level error.
+ * GSOCK_IOERR - low-level error.
*/
GSocketError GSocket_SetServer(GSocket *sck)
{
(SOCKLEN_T *)&sck->m_local->m_len) != 0) ||
(listen(sck->m_fd, 5) != 0))
{
- closesocket(sck->m_fd);
- sck->m_fd = INVALID_SOCKET;
+ GSocket_close(sck);
sck->m_error = GSOCK_IOERR;
return GSOCK_IOERR;
}
* GSOCK_TIMEDOUT - timeout, no incoming connections.
* GSOCK_WOULDBLOCK - the call would block and the socket is nonblocking.
* GSOCK_MEMERR - couldn't allocate memory.
- * GSOCK_IOERR - low-level error.
+ * GSOCK_IOERR - low-level error.
*/
GSocket *GSocket_WaitConnection(GSocket *sck)
{
* GSOCK_TIMEDOUT - timeout, the connection failed.
* GSOCK_WOULDBLOCK - connection in progress (nonblocking sockets only)
* GSOCK_MEMERR - couldn't allocate memory.
- * GSOCK_IOERR - low-level error.
+ * GSOCK_IOERR - low-level error.
*/
GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
{
if (err != GSOCK_NOERROR)
{
- closesocket(sck->m_fd);
- sck->m_fd = INVALID_SOCKET;
+ GSocket_close(sck);
/* sck->m_error is set in _GSocket_Connect_Timeout */
}
- return err;
+ return (GSocketError) err;
}
/* If connect failed with EWOULDBLOCK and the GSocket object
/* If connect failed with an error other than EWOULDBLOCK,
* then the call to GSocket_Connect() has failed.
*/
- closesocket(sck->m_fd);
- sck->m_fd = INVALID_SOCKET;
+ GSocket_close(sck);
sck->m_error = GSOCK_IOERR;
return GSOCK_IOERR;
}
* Error codes:
* GSOCK_INVSOCK - the socket is in use.
* GSOCK_INVADDR - the local address has not been set.
- * GSOCK_IOERR - low-level error.
+ * GSOCK_IOERR - low-level error.
*/
GSocketError GSocket_SetNonOriented(GSocket *sck)
{
sck->m_local->m_addr,
(SOCKLEN_T *)&sck->m_local->m_len) != 0))
{
- closesocket(sck->m_fd);
- sck->m_fd = INVALID_SOCKET;
+ GSocket_close(sck);
sck->m_error = GSOCK_IOERR;
return GSOCK_IOERR;
}
return result;
-#else
+#else
assert(socket != NULL);
return flags & socket->m_detected;
* Sets the socket to non-blocking mode. All IO calls will return
* immediately.
*/
-void GSocket_SetNonBlocking(GSocket *socket, bool non_block)
+void GSocket_SetNonBlocking(GSocket *socket, int non_block)
{
assert(socket != NULL);
* operation, there is still data available, the callback function will
* be called again.
* GSOCK_OUTPUT:
- * The socket is available for writing. That is, the next write call
+ * The socket is available for writing. That is, the next write call
* won't block. This event is generated only once, when the connection is
* first established, and then only if a call failed with GSOCK_WOULDBLOCK,
* when the output buffer empties again. This means that the app should
#else /* !wxUSE_SOCKETS */
-/*
+/*
* Translation unit shouldn't be empty, so include this typedef to make the
* compiler (VC++ 6.0, for example) happy
*/
-typedef (*wxDummy)();
+typedef void (*wxDummy)();
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
+
+// vi:sts=4:sw=4:et