我很想知道在拨打电话时会发生什么。
recv(<socket no>, NULL , <lenght> , 0) ;
还有一个问题是,在调用套接字上的recv函数数据后会刷新或真正发生了什么?
此致 基兰
答案 0 :(得分:0)
如果你提供一个非零长度,你最好有一个非NULL指针来放入数据,否则你会遇到各种各样的麻烦。
如果指定的长度为零,则应该得到零返回值,而没有数据写入缓冲区。
如果提供的缓冲区太小,是否丢弃数据取决于连接类型。
答案 1 :(得分:0)
如果缓冲区为NULL且大小为非零,则recv的返回值为-1。我测试了它,并且errno被设置为ECONNABORTED,但这听起来像是一个奇怪的错误。
使用带有posix套接字的cygwin和gcc。
如果您收到数据并且请求的大小较小,则可以重复调用recv以获取其余数据。取决于您的套接字是非阻塞还是当套接字没有更多数据时,recv返回-1,而errno是EAGAIN或EWOULDBLOCK。如果它是阻塞的,它将阻塞,直到填充缓冲区或函数被中断。
答案 2 :(得分:0)
我不知道为什么你会问这个问题。不要使用空缓冲区调用recv(),这是我的建议。结果至多是未定义的,最坏的情况是至少为SIGSEGV。
还有一个问题是,在调用套接字上的recv函数数据后会刷新或真正发生了什么?
这取决于。在TCP中,未读数据仍有待下次读取。在UDP中,数据报的未读部分被丢弃。