tcp client 非阻塞连接,每次都返回错误 -1 的问题

发表在 Network2019-11-18 17:55 [复制链接] 0 82

本帖最后由 _Tony_ 于 2019-11-18 17:59 编辑
! h7 N% ]# o1 I: _- S6 Y$ S3 L5 [7 \9 c
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)# S; J" H! Z, I5 T* |) C" c5 ?
{: v1 R/ L$ M; L9 Z9 a8 w( G& g
    closesocket(sock);
- X- v, E) ?$ }" `( c2 H    return -RT_ERROR;. [7 o: r0 S) V) j) G; d1 ^) Q$ {) m
}
  u  n! C5 h' }* B$ R4 x8 M: S
, S7 W4 m  \- j9 l$ Z主板做为TCP client,在connect服务器的时候网线突然拔掉,程序就阻塞在函数 lwip_netconn_do_connect 里面等待连接上服务器(sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0);)。
" `5 l' D! s  n4 n( T所以打算将其改为非阻塞连接。, q$ n. N+ j1 B

4 ?3 f9 c9 ?+ F5 Vint imode=1;% v  ~! ~' h/ Q/ F
int retVal;
9 b# l8 b& Q/ IretVal=ioctlsocket(sock, FIONBIO, &imode);
& {; s/ g2 c% D7 s6 I2 I$ T3 A  o2 j3 @8 A, T
; s' U6 y0 Z: Z1 L$ P6 e1 k3 {# Y  N
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)4 x# I* M8 Q' B& j
{2 ~) Y6 E% \9 }1 O' W) [' u
    closesocket(sock);
2 Q6 v1 x- f0 i) P    return -RT_ERROR;: O+ n9 O, `- K9 c! D$ c: ^8 `9 i
}* C* ]! y( B- {1 N$ K7 L3 G0 j
( o2 s6 o# o/ e5 ^7 P6 T
但是将程序改为非阻塞连接,不管网线连接是否正常,每次connect都返回连接错误(-1)。! w% |8 d  t% Q, h
请问下大家,有什么方式解决Tcp client非阻塞连接错误的问题吗?, H" r$ w& I2 v" K- O2 C7 `

9 A3 t+ D7 [2 e4 U. [  n环境:rtthread版本: 3.1.1- t" D. i6 H+ p3 v8 ?& w
/ n0 i, h% m) u' P9 Y( W8 l
lwip版本:2.0.2
1 `0 c( j3 f/ z5 ]" |; f+ E7 t+ J+ W( G! {
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表