当前位置: 代码迷 >> VxWorks >> vxworks下,在程序中修改ftp的recv_buf大小为1024后,下载的文件下了8k多,为什么?该怎么解决
  详细解决方案

vxworks下,在程序中修改ftp的recv_buf大小为1024后,下载的文件下了8k多,为什么?该怎么解决

热度:8351   发布时间:2013-02-26 00:00:00.0
vxworks下,在程序中修改ftp的recv_buf大小为1024后,下载的文件下了8k多,为什么?
自己写的ftp客户端,将data连接的recv_buf大小设置为1024,然后以vxworks自带的ftp servier为server,进行文件下载,结果发现可以下载成功,但下载的文件少了8k左右个字节。将recv_buf大小设置为2048也同样会少,设置成4096和8192就没有问题,为什么?是不是server端的窗口是8192,在server端数据发送完成后会主动断开data连接,而此时缓冲区的数据还没有传完,就data连接close了,导致下载少了几k?怎么解决呢?

------解决方案--------------------------------------------------------
因为socket数据没有读完就被关闭了,必须设置socket选项:
struct linger so_linger = {1, 0};
setsockopt (fd, SOL_SOCKET, SO_LINGER, (void *)&so_linger, sizeof (so_linger));
注意:ftp的控制socket和数据socket都需要设置这个选项。
  相关解决方案