MCPcopy Create free account
hub / github.com/alibaba/PhotonLibOS / fstack_connect

Function fstack_connect

io/fstack-dpdk.cpp:250–275  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

248static_assert(sizeof(linux_sockaddr) == sizeof(sockaddr));
249
250int fstack_connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen, Timeout timeout) {
251 int err = 0;
252 while (true) {
253 int ret = ff_connect(sockfd, (linux_sockaddr*) addr, addrlen);
254 if (ret < 0) {
255 auto e = errno;
256 if (e == EINTR) {
257 err = 1;
258 continue;
259 }
260 if (e == EINPROGRESS || (e == EADDRINUSE && err == 1)) {
261 ret = g_engine->wait_for_fd_writable(sockfd, timeout);
262 if (ret < 0) return -1;
263 socklen_t n = sizeof(err);
264 ret = ff_getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &err, &n);
265 if (ret < 0) return -1;
266 if (err) {
267 errno = err;
268 return -1;
269 }
270 return 0;
271 }
272 }
273 return ret;
274 }
275}
276
277int fstack_listen(int sockfd, int backlog) {
278 return ff_listen(sockfd, backlog);

Callers 1

fd_connectMethod · 0.85

Calls 1

wait_for_fd_writableMethod · 0.45

Tested by

no test coverage detected