基本上,我在客户端使用WSARecv这个函数:
type Conn struct {
sd s.Handle
sa s.SockaddrInet4
}
func (c *Conn) Read(b []byte) (int, error) {
dataBuf := s.WSABuf{Len: uint32(len(b)), Buf: &b[0]}
flags := uint32(0)
qty := uint32(0)
err := s.WSARecv(c.sd, &dataBuf, 1, &qty, &flags, nil, nil)
return int(qty), err
}
同时服务器正在发送多个数据包(第一个是8个字节,然后它们都在1000个字节以下)。
当缓冲区b
已满时,WSARecv不会停止读取。当它占用太多记忆时,我得到了一个难以回答的答案:
异常0xc0000005 0x8 0xc08203195f 0xc08203195f PC = 0xc08203195f syscall.Syscall9(0x7ff86cafe230,0x7,0x1f8,0xc08200b5d0,0x1,0xc08200b5f0,0xc08200b5e0,0x0,0x0,0x0,...) (这样的十几行)
当然我的程序崩溃了。
我想知道我的问题是关于我使用WSARecv的方式,还是我每次收到数据包时都会发回一个知识。
注意:我的服务器在Linux下(和windows ofc下的客户端)。