MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mt_tcp_check_recv

Function mt_tcp_check_recv

adapter/micro_thread/mt_api.cpp:150–208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

148}
149
150static int mt_tcp_check_recv(int sock, char* rcv_buf, int &len, int flags, int timeout, MtFuncTcpMsgLen func)
151{
152 int recv_len = 0;
153 utime64_t start_ms = MtFrame::Instance()->GetLastClock();
154 do
155 {
156 utime64_t cost_time = MtFrame::Instance()->GetLastClock() - start_ms;
157 if (cost_time > (utime64_t)timeout)
158 {
159 errno = ETIME;
160 MTLOG_ERROR("tcp socket[%d] recv not ok, timeout", sock);
161 return -3;
162 }
163
164 int rc = MtFrame::recv(sock, (rcv_buf + recv_len), (len - recv_len), 0, (timeout - (int)cost_time));
165 if (rc < 0)
166 {
167 MTLOG_ERROR("tcp socket[%d] recv failed ret[%d][%m]", sock, rc);
168 return -3;
169 }
170 else if (rc == 0)
171 {
172 len = recv_len;
173 MTLOG_ERROR("tcp socket[%d] remote close", sock);
174 return -7;
175 }
176 recv_len += rc;
177
178 rc = func(rcv_buf, recv_len);
179 if (rc < 0)
180 {
181 MTLOG_ERROR("tcp socket[%d] user check pkg error[%d]", sock, rc);
182 return -5;
183 }
184 else if (rc == 0)
185 {
186 if (len == recv_len)
187 {
188 MTLOG_ERROR("tcp socket[%d] user check pkg not ok, but no more buff", sock);
189 return -6;
190 }
191 continue;
192 }
193 else
194 {
195 if (rc > recv_len)
196 {
197 continue;
198 }
199 else
200 {
201 len = rc;
202 break;
203 }
204 }
205 } while (true);
206
207 return 0;

Callers 2

mt_tcpsendrcvFunction · 0.85
mt_tcpsendrcv_shortFunction · 0.85

Calls 4

GetLastClockMethod · 0.80
AllocMethod · 0.80
recvFunction · 0.70
resetMethod · 0.45

Tested by

no test coverage detected