Fixed bug #10088: Correctly implemented shutdown at socket level.

This commit is contained in:
goldsimon
2010-06-24 19:33:14 +00:00
parent f61b80ca6a
commit 6929a786aa
7 changed files with 139 additions and 25 deletions

View File

@@ -234,6 +234,7 @@ err_t netconn_send(struct netconn *conn, struct netbuf *buf);
err_t netconn_write(struct netconn *conn, const void *dataptr, size_t size,
u8_t apiflags);
err_t netconn_close(struct netconn *conn);
err_t netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx);
#if LWIP_IGMP
err_t netconn_join_leave_group(struct netconn *conn, ip_addr_t *multiaddr,

View File

@@ -48,6 +48,10 @@
extern "C" {
#endif
#define NETCONN_SHUT_RD 1
#define NETCONN_SHUT_WR 2
#define NETCONN_SHUT_RDWR 3
/* IP addresses and port numbers are expected to be in
* the same byte order as in the corresponding pcb.
*/
@@ -89,6 +93,10 @@ struct api_msg_msg {
struct {
u32_t len;
} r;
/** used for do_close (/shutdown) */
struct {
u8_t shut;
} sd;
#if LWIP_IGMP
/** used for do_join_leave_group */
struct {
@@ -144,6 +152,7 @@ void do_recv ( struct api_msg_msg *msg);
void do_write ( struct api_msg_msg *msg);
void do_getaddr ( struct api_msg_msg *msg);
void do_close ( struct api_msg_msg *msg);
void do_shutdown ( struct api_msg_msg *msg);
#if LWIP_IGMP
void do_join_leave_group( struct api_msg_msg *msg);
#endif /* LWIP_IGMP */

View File

@@ -279,6 +279,12 @@ typedef struct ip_mreq {
#define O_NDELAY 1 /* same as O_NONBLOCK, for compatibility */
#endif
#ifndef SHUT_RD
#define SHUT_RD 1
#define SHUT_WR 2
#define SHUT_RDWR 3
#endif
/* FD_SET used for lwip_select */
#ifndef FD_SET
#undef FD_SETSIZE