1 #include "syshdrs.h"
2 #ifdef PRAGMA_HDRSTOP
3 # pragma hdrstop
4 #endif
5
6 int
SNewStreamClient(void)7 SNewStreamClient(void)
8 {
9 int sfd;
10
11 sfd = socket(AF_INET, SOCK_STREAM, 0);
12 if (sfd < 0)
13 return kSNewFailed;
14
15 return (sfd);
16 } /* SNewStreamClient */
17
18
19
20
21 int
SNewDatagramClient(void)22 SNewDatagramClient(void)
23 {
24 int sfd;
25
26 sfd = socket(AF_INET, SOCK_DGRAM, 0);
27 if (sfd < 0)
28 return kSNewFailed;
29
30 return (sfd);
31 } /* SNewDatagramClient */
32
33
34
35
36 int
SNewStreamServerByAddr(struct sockaddr_in * const saddr,const int nTries,const int reuseFlag,const int listenQueueSize)37 SNewStreamServerByAddr(struct sockaddr_in *const saddr, const int nTries, const int reuseFlag, const int listenQueueSize)
38 {
39 int oerrno;
40 int sfd;
41
42 if (saddr == NULL) {
43 errno = EINVAL;
44 return (kSioErrInvalidArg);
45 }
46
47 sfd = socket(AF_INET, SOCK_STREAM, 0);
48 if (sfd < 0)
49 return kSNewFailed;
50
51 if (SBindAddr(sfd, saddr, nTries, reuseFlag) < 0) {
52 oerrno = errno;
53 (void) closesocket(sfd);
54 errno = oerrno;
55 return kSBindFailed;
56 }
57
58 if (SListen(sfd, listenQueueSize) < 0) {
59 oerrno = errno;
60 (void) closesocket(sfd);
61 errno = oerrno;
62 return kSListenFailed;
63 }
64
65 return (sfd);
66 } /* SNewStreamServerByAddr */
67
68
69
70
71 int
SNewStreamServerByName(const char * const addrStr,const int nTries,const int reuseFlag,const int listenQueueSize)72 SNewStreamServerByName(const char *const addrStr, const int nTries, const int reuseFlag, const int listenQueueSize)
73 {
74 struct sockaddr_in saddr;
75
76 if (addrStr == NULL) {
77 errno = EINVAL;
78 return (kSioErrInvalidArg);
79 }
80
81 if ((strchr(addrStr, ':') == NULL) && (isdigit((int) addrStr[0]))) {
82 /* Just a port number specified */
83 return (SNewStreamServer(atoi(addrStr), nTries, reuseFlag, listenQueueSize));
84 }
85
86 /* ip:port */
87 if (AddrStrToAddr(addrStr, &saddr, -1) < 0)
88 return (kSioErrBadAddrStr);
89
90 return (SNewStreamServerByAddr(&saddr, nTries, reuseFlag, listenQueueSize));
91 } /* SNewStreamServerByName */
92
93
94
95
96 int
SNewStreamServer(const int port,const int nTries,const int reuseFlag,const int listenQueueSize)97 SNewStreamServer(const int port, const int nTries, const int reuseFlag, const int listenQueueSize)
98 {
99 int oerrno;
100 int sfd;
101
102 sfd = socket(AF_INET, SOCK_STREAM, 0);
103 if (sfd < 0)
104 return kSNewFailed;
105
106 if (SBind(sfd, port, nTries, reuseFlag) < 0) {
107 oerrno = errno;
108 (void) closesocket(sfd);
109 errno = oerrno;
110 return kSBindFailed;
111 }
112
113 if (SListen(sfd, listenQueueSize) < 0) {
114 oerrno = errno;
115 (void) closesocket(sfd);
116 errno = oerrno;
117 return kSListenFailed;
118 }
119
120 return (sfd);
121 } /* SNewStreamServer */
122
123
124
125
126 int
SNewDatagramServerByAddr(struct sockaddr_in * const saddr,const int nTries,const int reuseFlag)127 SNewDatagramServerByAddr(struct sockaddr_in *const saddr, const int nTries, const int reuseFlag)
128 {
129 int oerrno;
130 int sfd;
131
132 if (saddr == NULL) {
133 errno = EINVAL;
134 return (kSioErrInvalidArg);
135 }
136
137 sfd = socket(AF_INET, SOCK_DGRAM, 0);
138 if (sfd < 0)
139 return kSNewFailed;
140
141 if (SBindAddr(sfd, saddr, nTries, reuseFlag) < 0) {
142 oerrno = errno;
143 (void) closesocket(sfd);
144 errno = oerrno;
145 return kSBindFailed;
146 }
147
148 return (sfd);
149 } /* SNewDatagramServer */
150
151
152
153
154 int
SNewDatagramServerByName(const char * const addrStr,const int nTries,const int reuseFlag)155 SNewDatagramServerByName(const char *const addrStr, const int nTries, const int reuseFlag)
156 {
157 struct sockaddr_in saddr;
158
159 if (addrStr == NULL) {
160 errno = EINVAL;
161 return (kSioErrInvalidArg);
162 }
163
164 if ((strchr(addrStr, ':') == NULL) && (isdigit((int) addrStr[0]))) {
165 /* Just a port number specified */
166 return (SNewDatagramServer(atoi(addrStr), nTries, reuseFlag));
167 }
168
169 /* ip:port */
170 if (AddrStrToAddr(addrStr, &saddr, -1) < 0)
171 return (kSioErrBadAddrStr);
172
173 return (SNewDatagramServerByAddr(&saddr, nTries, reuseFlag));
174 } /* SNewDatagramServer */
175
176
177
178
179 int
SNewDatagramServer(const int port,const int nTries,const int reuseFlag)180 SNewDatagramServer(const int port, const int nTries, const int reuseFlag)
181 {
182 int oerrno;
183 int sfd;
184
185 sfd = socket(AF_INET, SOCK_DGRAM, 0);
186 if (sfd < 0)
187 return kSNewFailed;
188
189 if (SBind(sfd, port, nTries, reuseFlag) < 0) {
190 oerrno = errno;
191 (void) closesocket(sfd);
192 errno = oerrno;
193 return kSBindFailed;
194 }
195
196 return (sfd);
197 } /* SNewDatagramServer */
198