socket.shutdown abandon unsend buffer now, see issue #371

This commit is contained in:
Cloud Wu
2015-11-11 10:44:50 +08:00
parent c28ae25c70
commit 7521fe0530
6 changed files with 39 additions and 6 deletions

View File

@@ -119,6 +119,7 @@ struct request_setudp {
struct request_close {
int id;
int shutdown;
uintptr_t opaque;
};
@@ -787,7 +788,7 @@ close_socket(struct socket_server *ss, struct request_close *request, struct soc
if (type != -1)
return type;
}
if (send_buffer_empty(s)) {
if (request->shutdown || send_buffer_empty(s)) {
force_close(ss,s,result);
result->id = id;
result->opaque = request->opaque;
@@ -1366,6 +1367,17 @@ void
socket_server_close(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request.u.close.id = id;
request.u.close.shutdown = 0;
request.u.close.opaque = opaque;
send_request(ss, &request, 'K', sizeof(request.u.close));
}
void
socket_server_shutdown(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request.u.close.id = id;
request.u.close.shutdown = 1;
request.u.close.opaque = opaque;
send_request(ss, &request, 'K', sizeof(request.u.close));
}