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都需要设置这个选项。