MCPcopy Create free account
hub / github.com/axboe/liburing / recv_prep

Function recv_prep

test/recvsend_bundle.c:79–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77}
78
79static int recv_prep(struct io_uring *ring, struct recv_data *rd, int *sock)
80{
81 struct sockaddr_in saddr;
82 int sockfd, ret, val, use_fd;
83 socklen_t socklen;
84
85 memset(&saddr, 0, sizeof(saddr));
86 saddr.sin_family = AF_INET;
87 saddr.sin_addr.s_addr = htonl(INADDR_ANY);
88 saddr.sin_port = htons(use_port);
89
90 if (use_tcp)
91 sockfd = socket(AF_INET, SOCK_STREAM, 0);
92 else
93 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
94 if (sockfd < 0) {
95 perror("socket");
96 return 1;
97 }
98
99 val = 1;
100 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
101
102 ret = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
103 if (ret < 0) {
104 perror("bind");
105 goto err;
106 }
107
108 if (use_tcp) {
109 ret = listen(sockfd, 1);
110 if (ret < 0) {
111 perror("listen");
112 goto err;
113 }
114
115 pthread_barrier_wait(&rd->connect);
116
117 if (rd->abort)
118 goto err;
119
120 socklen = sizeof(saddr);
121 use_fd = accept(sockfd, (struct sockaddr *)&saddr, &socklen);
122 if (use_fd < 0) {
123 perror("accept");
124 goto err;
125 }
126 } else {
127 use_fd = sockfd;
128 pthread_barrier_wait(&rd->connect);
129 }
130
131 rd->accept_fd = use_fd;
132 pthread_barrier_wait(&rd->startup);
133 pthread_barrier_wait(&rd->barrier);
134
135 if (arm_recv(ring, rd))
136 goto err;

Callers 1

recv_fnFunction · 0.70

Calls 1

arm_recvFunction · 0.70

Tested by

no test coverage detected