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