upd5
This commit is contained in:
+42
-2
@@ -14,8 +14,10 @@ fn C.shutdown(i32, i32) i32
|
||||
fn C.close(i32) i32
|
||||
fn C.setsockopt(i32, i32, i32, voidptr, i32) i32
|
||||
fn C.getsockopt(i32, i32, i32, voidptr, voidptr) i32
|
||||
|
||||
struct C.sockaddr_storage {}
|
||||
fn C.recv(i32, voidptr, usize, i32) i32
|
||||
fn C.recvfrom(i32, voidptr, usize, i32, voidptr, i32) i32
|
||||
fn C.send(i32, voidptr, usize, i32) i32
|
||||
fn C.sendto(i32, voidptr, usize, i32, voidptr, i32) i32
|
||||
|
||||
pub struct Socket {
|
||||
pub:
|
||||
@@ -111,6 +113,44 @@ pub fn (s Socket) get_option_int(level SocketLevel, option SocketOption) !int {
|
||||
return result
|
||||
}
|
||||
|
||||
// receive a message from a connected socket.
|
||||
pub fn (s Socket) recv(mut buf []u8, flags MsgFlag) !int {
|
||||
r := C.recv(s.fd, buf.data, buf.len, flags)
|
||||
if r == -1 {
|
||||
return os.last_error()
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
// receive a message from a connected socket.
|
||||
pub fn (s Socket) recv_from(mut buf []u8, flags MsgFlag) !(int, SocketAddr) {
|
||||
mut sock_addr_storage := &C.sockaddr_storage{}
|
||||
mut sock_addr_len := sizeof(C.sockaddr_storage)
|
||||
r := C.recvfrom(s.fd, buf.data, buf.len, flags, sock_addr_storage, sock_addr_len)
|
||||
if r == -1 {
|
||||
return os.last_error()
|
||||
}
|
||||
return r, unsafe { SocketAddr.from_ptr(sock_addr_storage, sock_addr_len)! }
|
||||
}
|
||||
|
||||
// send a message on socket.
|
||||
pub fn (s Socket) send(buf []u8, flags MsgFlag) !int {
|
||||
r := C.send(s.fd, buf.data, buf.len, flags)
|
||||
if r == -1 {
|
||||
return os.last_error()
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
// send a message on socket using the dst socket address as destination instead of the socket peer address.
|
||||
pub fn (s Socket) send_to(buf []u8, dst SocketAddr, flags MsgFlag) !int {
|
||||
r := C.sendto(s.fd, buf.data, buf.len, flags, dst.ptr(), dst.size())
|
||||
if r == -1 {
|
||||
return os.last_error()
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
// shutdown shut downs socket send and receive operations.
|
||||
pub fn (s Socket) shutdown(how Shutdown) ! {
|
||||
if C.shutdown(s.fd, i32(how)) == -1 {
|
||||
|
||||
Reference in New Issue
Block a user