MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / lwip_shutdown

Function lwip_shutdown

components/net/lwip/lwip-2.1.2/src/api/sockets.c:2676–2719  ·  view source on GitHub ↗

* Close one end of a full-duplex connection. */

Source from the content-addressed store, hash-verified

2674 * Close one end of a full-duplex connection.
2675 */
2676int
2677lwip_shutdown(int s, int how)
2678{
2679 struct lwip_sock *sock;
2680 err_t err;
2681 u8_t shut_rx = 0, shut_tx = 0;
2682
2683 LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_shutdown(%d, how=%d)\n", s, how));
2684
2685 sock = get_socket(s);
2686 if (!sock) {
2687 return -1;
2688 }
2689
2690 if (sock->conn != NULL) {
2691 if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
2692 sock_set_errno(sock, EOPNOTSUPP);
2693 done_socket(sock);
2694 return -1;
2695 }
2696 } else {
2697 sock_set_errno(sock, ENOTCONN);
2698 done_socket(sock);
2699 return -1;
2700 }
2701
2702 if (how == SHUT_RD) {
2703 shut_rx = 1;
2704 } else if (how == SHUT_WR) {
2705 shut_tx = 1;
2706 } else if (how == SHUT_RDWR) {
2707 shut_rx = 1;
2708 shut_tx = 1;
2709 } else {
2710 sock_set_errno(sock, EINVAL);
2711 done_socket(sock);
2712 return -1;
2713 }
2714 err = netconn_shutdown(sock->conn, shut_rx, shut_tx);
2715
2716 sock_set_errno(sock, err_to_errno(err));
2717 done_socket(sock);
2718 return (err == ERR_OK ? 0 : -1);
2719}
2720
2721static int
2722lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, u8_t local)

Callers 2

tcp_server_entryFunction · 0.50

Calls 5

done_socketFunction · 0.85
get_socketFunction · 0.70
netconn_typeEnum · 0.70
netconn_shutdownFunction · 0.70
err_to_errnoFunction · 0.70

Tested by 1