mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
If recv one udp message, try read next immediately rather than until next epoll_wait
This commit is contained in:
@@ -1205,7 +1205,17 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (e->read) {
|
if (e->read) {
|
||||||
int type = (s->protocol == PROTOCOL_TCP ? forward_message_tcp : forward_message_udp)(ss, s, result);
|
int type;
|
||||||
|
if (s->protocol == PROTOCOL_TCP) {
|
||||||
|
type = forward_message_tcp(ss, s, result);
|
||||||
|
} else {
|
||||||
|
type = forward_message_udp(ss, s, result);
|
||||||
|
if (type == SOCKET_UDP) {
|
||||||
|
// try read again
|
||||||
|
--ss->event_index;
|
||||||
|
return SOCKET_UDP;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (e->write) {
|
if (e->write) {
|
||||||
// Try to dispatch write message next step if write flag set.
|
// Try to dispatch write message next step if write flag set.
|
||||||
e->read = false;
|
e->read = false;
|
||||||
@@ -1452,6 +1462,8 @@ socket_server_udp(struct socket_server *ss, uintptr_t opaque, const char * addr,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sp_nonblocking(fd);
|
||||||
|
|
||||||
int id = reserve_id(ss);
|
int id = reserve_id(ss);
|
||||||
if (id < 0) {
|
if (id < 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ local socket = require "socket"
|
|||||||
local function server()
|
local function server()
|
||||||
local host
|
local host
|
||||||
host = socket.udp(function(data, sz, from)
|
host = socket.udp(function(data, sz, from)
|
||||||
print("server recv", skynet.tostring(data,sz), socket.udp_address(from))
|
local str = skynet.tostring(data,sz) -- skynet.tostring should call only once, because it will free the pointer data
|
||||||
socket.sendto(host, from, "OK")
|
print("server recv", str, socket.udp_address(from))
|
||||||
|
socket.sendto(host, from, "OK " .. str)
|
||||||
end , "127.0.0.1", 8765) -- bind an address
|
end , "127.0.0.1", 8765) -- bind an address
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -14,7 +15,9 @@ local function client()
|
|||||||
print("client recv", skynet.tostring(data,sz), socket.udp_address(from))
|
print("client recv", skynet.tostring(data,sz), socket.udp_address(from))
|
||||||
end)
|
end)
|
||||||
socket.udp_connect(c, "127.0.0.1", 8765)
|
socket.udp_connect(c, "127.0.0.1", 8765)
|
||||||
socket.write(c, "hello") -- write to the address by udp_connect binding
|
for i=1,20 do
|
||||||
|
socket.write(c, "hello " .. i) -- write to the address by udp_connect binding
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
|
|||||||
Reference in New Issue
Block a user