diff options
author | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
---|---|---|
committer | William Harrington <kb0iic@berzerkula.org> | 2025-01-14 16:06:02 -0600 |
commit | 0cc9b20c15460213e488bf5e70963b941482f628 (patch) | |
tree | bb0143245583ec846630f39bfa2258dba640ccd7 /sdk/net/tcpsocket.c | |
parent | 0e084ade5069756d487b5c948c48b777e37c00c9 (diff) |
Add source.
Diffstat (limited to 'sdk/net/tcpsocket.c')
-rw-r--r-- | sdk/net/tcpsocket.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sdk/net/tcpsocket.c b/sdk/net/tcpsocket.c new file mode 100644 index 0000000..b5e61bf --- /dev/null +++ b/sdk/net/tcpsocket.c @@ -0,0 +1,42 @@ +/* + * Create and bind a tcp socket for a server. + * $Id$ + * Copyright (c) 1997 by Tycho Softworks. + * For conditions of distribution and reuse see product license. + */ + +#include <net/socket.h> + +SOCKET tcpsocket(char *mask, int port, int backlog) +{ + SOCKET so; + struct sockaddr_in saddr; + struct in_addr *aptr; + + so = socket(AF_INET, SOCK_STREAM, 0); + if(so == INVALID_SOCKET) + return so; + + memset(&saddr, 0, sizeof(saddr)); + saddr.sin_family = AF_INET; + saddr.sin_port = htons(port); + aptr = getnetaddr(mask); + if(!aptr) + { + endsocket(so); + return INVALID_SOCKET; + } + saddr.sin_addr = *aptr; + + if(bind(so, (struct sockaddr *)&saddr, sizeof(saddr))) + { + endsocket(so); + return INVALID_SOCKET; + } + if(listen(so, backlog)) + { + endsocket(so); + return INVALID_SOCKET; + } + return so; +} |