49 struct sockaddr_in sock_addr;
59 sock->channel = socket(AF_INET, SOCK_STREAM, 0);
70 memset(&sock_addr, 0,
sizeof(sock_addr));
71 sock_addr.sin_family = AF_INET;
72 sock_addr.sin_addr.s_addr = ip->
host;
73 sock_addr.sin_port = ip->
port;
76 if ( connect(sock->channel, (
struct sockaddr *)&sock_addr,
86 memset(&sock_addr, 0,
sizeof(sock_addr));
87 sock_addr.sin_family = AF_INET;
89 sock_addr.sin_port = ip->
port;
99 setsockopt(sock->channel, SOL_SOCKET, SO_REUSEADDR, (
char*)&yes,
sizeof(yes));
104 if ( bind(sock->channel, (
struct sockaddr *)&sock_addr,
115 #if defined(__BEOS__) && defined(SO_NONBLOCK)
119 setsockopt(sock->channel, SOL_SOCKET, SO_NONBLOCK, &b,
sizeof(b));
121 #elif defined(O_NONBLOCK)
123 fcntl(sock->channel, F_SETFL, O_NONBLOCK);
127 unsigned long mode = 1;
128 ioctlsocket (sock->channel, FIONBIO, &mode);
130 #elif defined(__OS2__)
133 ioctl(sock->channel, FIONBIO, &dontblock);
136 #warning How do we set non-blocking mode on other operating systems?
145 setsockopt(sock->channel, IPPROTO_TCP, TCP_NODELAY, (
char*)&yes,
sizeof(yes));
148 #warning Building without TCP_NODELAY
152 sock->remoteAddress.host = sock_addr.sin_addr.s_addr;
153 sock->remoteAddress.port = sock_addr.sin_port;
169 struct sockaddr_in sock_addr;
173 if ( ! server->sflag ) {
181 if ( sock ==
NULL ) {
187 sock_alen =
sizeof(sock_addr);
188 sock->channel = accept(server->channel, (
struct sockaddr *)&sock_addr,
197 unsigned long mode = 0;
198 ioctlsocket (sock->channel, FIONBIO, &mode);
200 #elif defined(O_NONBLOCK)
202 int flags = fcntl(sock->channel, F_GETFL, 0);
203 fcntl(sock->channel, F_SETFL, flags & ~O_NONBLOCK);
206 sock->remoteAddress.host = sock_addr.sin_addr.s_addr;
207 sock->remoteAddress.port = sock_addr.sin_port;
228 return(&sock->remoteAddress);
252 len = send(sock->channel, (
const char *) data, left, 0);
281 len = recv(sock->channel, (
char *) data, maxlen, 0);
291 if ( sock !=
NULL ) {
DECLSPEC int SDLCALL SDLNet_TCP_Send(TCPsocket sock, const void *data, int len)
DECLSPEC void SDLCALL SDLNet_SetError(const char *fmt,...)
int SDLNet_GetLastError(void)
DECLSPEC TCPsocket SDLCALL SDLNet_TCP_Accept(TCPsocket server)
DECLSPEC IPaddress *SDLCALL SDLNet_TCP_GetPeerAddress(TCPsocket sock)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
DECLSPEC TCPsocket SDLCALL SDLNet_TCP_Open(IPaddress *ip)
GLenum GLsizei GLsizei GLsizei GLsizei GLbitfield flags
struct _TCPsocket * TCPsocket
uint8_t Uint8
An unsigned 8-bit integer type.
GLdouble GLdouble GLdouble b
DECLSPEC int SDLCALL SDLNet_TCP_Recv(TCPsocket sock, void *data, int maxlen)
void SDLNet_SetLastError(int err)
DECLSPEC void SDLCALL SDLNet_TCP_Close(TCPsocket sock)