* Name: gsocket.c
* Purpose: GSocket main Unix file
* CVSID: $Id$
- * Log: $Log$
- * Log: Revision 1.1 1999/07/22 17:51:54 GL
- * Log: Added GSocket for Unix (only GTK for the moment)
- * Log: Updated wxSocket to use GSocket API
- * Log: Added a progress bar to client.cpp
- * Log: Added CopyTo to wxMemoryOutputStream to copy the internal buffer to a specified buffer.
- * Log: Various changes/fixes to the high-level protocols FTP/HTTP
- * Log: Various Unicode fixes
- * Log: Removed sckint.*
- * Log:
- * Log: Revision 1.2 1999/07/18 15:52:34 guilhem
- * Log: * Copyright, etc.
- * Log:
* -------------------------------------------------------------------------
*/
#include <assert.h>
#include <sys/ioctl.h>
+#include <sys/types.h>
#ifdef vms
#include <socket.h>
#else
#include <sys/socket.h>
#endif
#include <sys/un.h>
-#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#ifdef sun
-#include <sys/filio.h>
+ #include <sys/filio.h>
#endif
#ifdef sgi
#endif
#include <signal.h>
+#include <features.h>
+#include <wx/setup.h>
#include <wx/gsocket.h>
#include "gsockunx.h"
+#ifndef SOCKLEN_T
+
+#ifdef __GLIBC__
+# if __GLIBC__ == 2
+# define SOCKLEN_T socklen_t
+# endif
+#else
+# define SOCKLEN_T int
+#endif
+
+#endif
+
/* Constructors / Destructors */
GSocket *GSocket_new()
{
assert(socket != NULL);
- _GSocket_GUI_Destroy(socket);
-
if (socket->m_fd != -1)
GSocket_Shutdown(socket);
+ _GSocket_GUI_Destroy(socket);
+
if (socket->m_local)
GAddress_destroy(socket->m_local);
GSocketError GSocket_SetLocal(GSocket *socket, GAddress *address)
{
- if (socket == NULL || (socket->m_fd != -1 && !socket->m_server))
+ assert(socket != NULL);
+
+ if ((socket->m_fd != -1 && !socket->m_server))
return GSOCK_INVSOCK;
if (address == NULL || address->m_family == GSOCK_NOFAMILY)
GSocketError GSocket_SetPeer(GSocket *socket, GAddress *address)
{
- if (socket == NULL)
- return GSOCK_INVSOCK;
+ assert(socket != NULL);
if (address == NULL || address->m_family == GSOCK_NOFAMILY) {
socket->m_error = GSOCK_INVADDR;
{
GAddress *address;
struct sockaddr addr;
- socklen_t size;
+ SOCKLEN_T size;
assert(socket != NULL);
GSocket_SetServer() setup the socket as a server. It uses the "Local" field
of GSocket. "Local" must be set by GSocket_SetLocal() before
GSocket_SetServer() is called. GSOCK_INVSOCK if socket has been initialized.
- In the other cases, it returns GSOCK_INVADDR.
+ In case, you haven't yet defined the local address, it returns GSOCK_INVADDR.
+ In the other cases it returns GSOCK_IOERR.
*/
GSocketError GSocket_SetServer(GSocket *sck)
{
case AF_UNIX:
address->m_family = GSOCK_UNIX;
break;
+#ifdef AF_INET6
case AF_INET6:
address->m_family = GSOCK_INET6;
break;
+#endif
default:
+
/* TODO error */
}
return GSOCK_NOERROR;
}
-GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port)
+GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
+ const char *protocol)
{
struct servent *se;
struct sockaddr_in *addr;
}
/* TODO: TCP or UDP */
- se = getservbyname(port, "tcp");
+ se = getservbyname(port, protocol);
if (!se) {
if (isdigit(port[0])) {
int port_int;