net: make socket.recv return the allocated buffer and the message length

pull/2089/head
Delyan Angelov 2019-09-23 19:48:18 +03:00 committed by Alexander Medvednikov
parent bf1ee28194
commit 0e39df24d4
2 changed files with 14 additions and 13 deletions

View File

@ -206,22 +206,19 @@ pub fn dial(address string, port int) ?Socket {
} }
// send string data to socket // send string data to socket
pub fn (s Socket) send(buf byteptr, len int) int { pub fn (s Socket) send(buf byteptr, len int) int? {
res := C.send(s.sockfd, buf, len, 0) res := int( C.send(s.sockfd, buf, len, 0) )
// if res < 0 { if res < 0 {
// return error('socket: send failed') return error('socket: send failed')
// } }
return res return res
} }
// receive string data from socket // receive string data from socket
pub fn (s Socket) recv(bufsize int) byteptr { pub fn (s Socket) recv(bufsize int) (byteptr, int) {
buf := malloc(bufsize) buf := malloc(bufsize)
res := C.recv(s.sockfd, buf, bufsize, 0) res := int( C.recv(s.sockfd, buf, bufsize, 0) )
// if res < 0 { return buf, res
// return error('socket: recv failed')
// }
return buf
} }
// TODO: remove cread/2 and crecv/2 when the Go net interface is done // TODO: remove cread/2 and crecv/2 when the Go net interface is done

View File

@ -17,9 +17,13 @@ fn test_socket() {
message := 'Hello World' message := 'Hello World'
socket.send(message.str, message.len) socket.send(message.str, message.len)
$if debug { println('message send: $message') }
$if debug { println('send socket: $socket.sockfd') }
bytes := client.recv(1024) bytes, blen := client.recv(1024)
received := tos(bytes, message.len) received := tos(bytes, blen)
$if debug { println('message received: $received') }
$if debug { println('client: $client.sockfd') }
assert message == received assert message == received