| 958 | } |
| 959 | |
| 960 | int |
| 961 | lwip_socket(int domain, int type, int protocol) |
| 962 | { |
| 963 | struct netconn *conn; |
| 964 | int i; |
| 965 | |
| 966 | LWIP_UNUSED_ARG(domain); |
| 967 | |
| 968 | /* create a netconn */ |
| 969 | switch (type) { |
| 970 | case SOCK_RAW: |
| 971 | conn = netconn_new_with_proto_and_callback(NETCONN_RAW, (u8_t)protocol, event_callback); |
| 972 | LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_RAW, %d) = ", |
| 973 | domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); |
| 974 | break; |
| 975 | case SOCK_DGRAM: |
| 976 | conn = netconn_new_with_callback( (protocol == IPPROTO_UDPLITE) ? |
| 977 | NETCONN_UDPLITE : NETCONN_UDP, event_callback); |
| 978 | LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_DGRAM, %d) = ", |
| 979 | domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); |
| 980 | break; |
| 981 | case SOCK_STREAM: |
| 982 | conn = netconn_new_with_callback(NETCONN_TCP, event_callback); |
| 983 | LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_STREAM, %d) = ", |
| 984 | domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); |
| 985 | if (conn != NULL) { |
| 986 | /* Prevent automatic window updates, we do this on our own! */ |
| 987 | netconn_set_noautorecved(conn, 1); |
| 988 | } |
| 989 | break; |
| 990 | default: |
| 991 | LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%d, %d/UNKNOWN, %d) = -1\n", |
| 992 | domain, type, protocol)); |
| 993 | set_errno(EINVAL); |
| 994 | return -1; |
| 995 | } |
| 996 | |
| 997 | if (!conn) { |
| 998 | LWIP_DEBUGF(SOCKETS_DEBUG, ("-1 / ENOBUFS (could not create netconn)\n")); |
| 999 | set_errno(ENOBUFS); |
| 1000 | return -1; |
| 1001 | } |
| 1002 | |
| 1003 | i = alloc_socket(conn, 0); |
| 1004 | |
| 1005 | if (i == -1) { |
| 1006 | netconn_delete(conn); |
| 1007 | set_errno(ENFILE); |
| 1008 | return -1; |
| 1009 | } |
| 1010 | conn->socket = i; |
| 1011 | LWIP_DEBUGF(SOCKETS_DEBUG, ("%d\n", i)); |
| 1012 | set_errno(0); |
| 1013 | return i; |
| 1014 | } |
| 1015 | |
| 1016 | int |
| 1017 | lwip_write(int s, const void *data, size_t size) |
no test coverage detected