Lines Matching refs:sock

56 static void at_connect_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, s…
241 static void at_do_event_changes(struct at_socket *sock, at_event_t event, rt_bool_t is_plus) in at_do_event_changes() argument
249 sock->sendevent = 1; in at_do_event_changes()
252 rt_wqueue_wakeup(&sock->wait_head, (void*) POLLOUT); in at_do_event_changes()
255 else if (sock->sendevent) in at_do_event_changes()
257 sock->sendevent = 0; in at_do_event_changes()
265 sock->rcvevent++; in at_do_event_changes()
268 rt_wqueue_wakeup(&sock->wait_head, (void*) POLLIN); in at_do_event_changes()
271 else if (sock->rcvevent) in at_do_event_changes()
273 sock->rcvevent --; in at_do_event_changes()
281 sock->errevent++; in at_do_event_changes()
284 rt_wqueue_wakeup(&sock->wait_head, (void*) POLLERR); in at_do_event_changes()
287 else if (sock->errevent) in at_do_event_changes()
289 sock->errevent --; in at_do_event_changes()
298 static void at_do_event_clean(struct at_socket *sock, at_event_t event) in at_do_event_clean() argument
304 sock->sendevent = 0; in at_do_event_clean()
309 sock->rcvevent = 0; in at_do_event_clean()
314 sock->errevent = 0; in at_do_event_clean()
322 static int free_socket(struct at_socket *sock) in free_socket() argument
336 if (sock->recv_notice) in free_socket()
338 rt_sem_delete(sock->recv_notice); in free_socket()
341 if (sock->recv_lock) in free_socket()
343 rt_mutex_delete(sock->recv_lock); in free_socket()
346 if (!rt_slist_isempty(&sock->recvpkt_list)) in free_socket()
348 at_recvpkt_all_delete(&sock->recvpkt_list); in free_socket()
362 if (at_sock && sock->socket == at_sock->socket) in free_socket()
375 rt_memset(sock, RT_NULL, sizeof(struct at_socket)); in free_socket()
383 struct at_socket *sock = RT_NULL; in alloc_socket_by_device() local
417 sock = &(device->sockets[idx]); in alloc_socket_by_device()
419 sock->socket = idx; in alloc_socket_by_device()
421 sock->ops = device->class->socket_ops; in alloc_socket_by_device()
423 sock->user_data = (void *) idx; in alloc_socket_by_device()
424 sock->device = (void *) device; in alloc_socket_by_device()
425 sock->magic = AT_SOCKET_MAGIC; in alloc_socket_by_device()
426 sock->state = AT_SOCKET_NONE; in alloc_socket_by_device()
427 sock->rcvevent = RT_NULL; in alloc_socket_by_device()
428 sock->sendevent = RT_NULL; in alloc_socket_by_device()
429 sock->errevent = RT_NULL; in alloc_socket_by_device()
431 rt_slist_init(&(sock->list)); in alloc_socket_by_device()
433 rt_slist_insert(&_socket_list, &(sock->list)); in alloc_socket_by_device()
436 rt_slist_init(&sock->recvpkt_list); in alloc_socket_by_device()
438 rt_wqueue_init(&sock->wait_head); in alloc_socket_by_device()
443 if ((sock->recv_notice = rt_sem_create(name, 0, RT_IPC_FLAG_FIFO)) == RT_NULL) in alloc_socket_by_device()
449 rt_sem_control(sock->recv_notice, RT_IPC_CMD_SET_VLIMIT, (void *)1); in alloc_socket_by_device()
453 if((sock->recv_lock = rt_mutex_create(name, RT_IPC_FLAG_PRIO)) == RT_NULL) in alloc_socket_by_device()
460 return sock; in alloc_socket_by_device()
464 if(sock != RT_NULL) in alloc_socket_by_device()
466 free_socket(sock); in alloc_socket_by_device()
501 static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size…
502 static void at_closed_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, si…
506 struct at_socket *sock = RT_NULL; in at_socket() local
535 sock = alloc_socket(socket_type); in at_socket()
536 if (sock == RT_NULL) in at_socket()
542 sock->type = socket_type; in at_socket()
543 sock->state = AT_SOCKET_OPEN; in at_socket()
546 sock->ops->at_set_event_cb(AT_SOCKET_EVT_RECV, at_recv_notice_cb); in at_socket()
547 sock->ops->at_set_event_cb(AT_SOCKET_EVT_CLOSED, at_closed_notice_cb); in at_socket()
549 sock->ops->at_set_event_cb(AT_SOCKET_EVT_CONNECTED, at_connect_notice_cb); in at_socket()
552 return sock->socket; in at_socket()
557 struct at_socket *sock = RT_NULL; in at_closesocket() local
563 sock = at_get_socket(socket); in at_closesocket()
564 if (sock == RT_NULL) in at_closesocket()
570 last_state = sock->state; in at_closesocket()
573 sock->state = AT_SOCKET_CLOSED; in at_closesocket()
577 if (sock->ops->at_closesocket(sock) != 0) in at_closesocket()
579 free_socket(sock); in at_closesocket()
585 free_socket(sock); in at_closesocket()
591 struct at_socket *sock = RT_NULL; in at_shutdown() local
594 sock = at_get_socket(socket); in at_shutdown()
595 if (sock == RT_NULL) in at_shutdown()
601 last_state = sock->state; in at_shutdown()
604 sock->state = AT_SOCKET_CLOSED; in at_shutdown()
608 if (sock->ops->at_closesocket(sock) != 0) in at_shutdown()
610 free_socket(sock); in at_shutdown()
616 free_socket(sock); in at_shutdown()
661 struct at_socket *sock = RT_NULL; in at_bind() local
672 sock = at_get_socket(socket); in at_bind()
673 if (sock == RT_NULL) in at_bind()
680 device = (struct at_device *) sock->device; in at_bind()
691 enum at_socket_type type = sock->type; in at_bind()
696 free_socket(sock); in at_bind()
722 sock->listen.port = port; in at_bind()
740 static void at_connect_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, s… in at_connect_notice_cb() argument
743 RT_ASSERT(sock == RT_NULL); in at_connect_notice_cb()
806 static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size… in at_recv_notice_cb() argument
812 if (sock->magic != AT_SOCKET_MAGIC || sock->state == AT_SOCKET_CLOSED) in at_recv_notice_cb()
819 rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER); in at_recv_notice_cb()
820 if (at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz) != RT_EOK) in at_recv_notice_cb()
823 rt_mutex_release(sock->recv_lock); in at_recv_notice_cb()
826 rt_mutex_release(sock->recv_lock); in at_recv_notice_cb()
828 rt_sem_release(sock->recv_notice); in at_recv_notice_cb()
830 at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE); in at_recv_notice_cb()
833 static void at_closed_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, si… in at_closed_notice_cb() argument
838 if (sock->magic != AT_SOCKET_MAGIC) in at_closed_notice_cb()
843 at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE); in at_closed_notice_cb()
844 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_closed_notice_cb()
846 sock->state = AT_SOCKET_CLOSED; in at_closed_notice_cb()
847 rt_sem_release(sock->recv_notice); in at_closed_notice_cb()
853 struct at_socket *sock = RT_NULL; in at_listen() local
856 sock = at_get_socket(socket); in at_listen()
857 if (sock == RT_NULL) in at_listen()
863 if (sock->state != AT_SOCKET_OPEN) in at_listen()
865 LOG_E("Socket(%d) connect state is %d.", sock->socket, sock->state); in at_listen()
871 if (sock->ops->at_listen(sock, backlog) < 0) in at_listen()
878 sock->listen.is_listen = RT_TRUE; in at_listen()
879 sock->state = AT_SOCKET_LISTEN; in at_listen()
884 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_listen()
893 struct at_socket *sock = RT_NULL; in at_connect() local
905 sock = at_get_socket(socket); in at_connect()
906 if (sock == RT_NULL) in at_connect()
912 if (sock->state != AT_SOCKET_OPEN) in at_connect()
914 LOG_E("Socket(%d) connect state is %d.", sock->socket, sock->state); in at_connect()
924 if (sock->ops->at_connect(sock, ipstr, remote_port, sock->type, RT_TRUE) < 0) in at_connect()
931 sock->state = AT_SOCKET_CONNECT; in at_connect()
936 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_connect()
940 at_do_event_changes(sock, AT_EVENT_SEND, RT_TRUE); in at_connect()
949 struct at_socket *sock = RT_NULL; in at_accept() local
957 sock = at_get_socket(socket); in at_accept()
958 if (sock == RT_NULL) in at_accept()
964 if (sock->state != AT_SOCKET_LISTEN) in at_accept()
966 LOG_E("Socket(%d) connect state is %d.", sock->socket, sock->state); in at_accept()
973 if (rt_sem_take(sock->recv_notice, RT_WAITING_FOREVER) != RT_EOK) in at_accept()
982 rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER); in at_accept()
983 at_recvpkt_get(&(sock->recvpkt_list), (char *) &receive_buff, AT_SOCKET_INFO_LEN); in at_accept()
984 rt_mutex_release(sock->recv_lock); in at_accept()
985 at_do_event_changes(sock, AT_EVENT_RECV, RT_FALSE); in at_accept()
997 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_accept()
1006 struct at_socket *sock = RT_NULL; in at_recvfrom() local
1017 sock = at_get_socket(socket); in at_recvfrom()
1018 if (sock == RT_NULL) in at_recvfrom()
1025 if (sock->type == AT_SOCKET_UDP) in at_recvfrom()
1033 …if(sock->state == AT_SOCKET_CONNECT && rt_memcmp(&sock->last_udp_adr, from, sizeof(struct sockaddr… in at_recvfrom()
1035 if (sock->ops->at_closesocket(sock) != 0) in at_recvfrom()
1037 free_socket(sock); in at_recvfrom()
1041 sock->state = AT_SOCKET_OPEN; in at_recvfrom()
1044 if (sock->state == AT_SOCKET_OPEN) in at_recvfrom()
1053 if (sock->ops->at_connect(sock, ipstr, remote_port, sock->type, RT_TRUE) < 0) in at_recvfrom()
1055 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_recvfrom()
1061 rt_memcpy(&sock->last_udp_adr, from, sizeof(struct sockaddr)); in at_recvfrom()
1062 sock->state = AT_SOCKET_CONNECT; in at_recvfrom()
1069 rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER); in at_recvfrom()
1070 recv_len = at_recvpkt_get(&(sock->recvpkt_list), (char *)mem, len); in at_recvfrom()
1071 rt_mutex_release(sock->recv_lock); in at_recvfrom()
1074 if (rt_slist_isempty(&sock->recvpkt_list)) in at_recvfrom()
1076 at_do_event_clean(sock, AT_EVENT_RECV); in at_recvfrom()
1082 if (sock->state == AT_SOCKET_CLOSED) in at_recvfrom()
1097 if (sock->recv_timeout == 0) in at_recvfrom()
1103 timeout = rt_tick_from_millisecond(sock->recv_timeout); in at_recvfrom()
1105 if (rt_sem_take(sock->recv_notice, timeout) != RT_EOK) in at_recvfrom()
1117 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_recvfrom()
1130 struct at_socket *sock = RT_NULL; in at_sendto() local
1140 sock = at_get_socket(socket); in at_sendto()
1141 if (sock == RT_NULL) in at_sendto()
1147 switch (sock->type) in at_sendto()
1150 if (sock->state == AT_SOCKET_CLOSED) in at_sendto()
1156 else if (sock->state != AT_SOCKET_CONNECT) in at_sendto()
1158 LOG_E("send data error, current socket (%d) state (%d) is error.", socket, sock->state); in at_sendto()
1164 if ((len = sock->ops->at_send(sock, (const char *) data, size, sock->type)) < 0) in at_sendto()
1181 …if(sock->state == AT_SOCKET_CONNECT && rt_memcmp(&sock->last_udp_adr, to, sizeof(struct sockaddr))… in at_sendto()
1183 if (sock->ops->at_closesocket(sock) != 0) in at_sendto()
1185 free_socket(sock); in at_sendto()
1189 sock->state = AT_SOCKET_OPEN; in at_sendto()
1192 if (sock->state == AT_SOCKET_OPEN) in at_sendto()
1201 if (sock->ops->at_connect(sock, ipstr, remote_port, sock->type, RT_TRUE) < 0) in at_sendto()
1208 rt_memcpy(&sock->last_udp_adr, to, sizeof(struct sockaddr)); in at_sendto()
1209 sock->state = AT_SOCKET_CONNECT; in at_sendto()
1212 if ((len = sock->ops->at_send(sock, (char *) data, size, sock->type)) < 0) in at_sendto()
1221 LOG_E("Socket (%d) type %d is not support.", socket, sock->type); in at_sendto()
1230 at_do_event_changes(sock, AT_EVENT_ERROR, RT_TRUE); in at_sendto()
1247 struct at_socket *sock; in at_getsockopt() local
1257 sock = at_get_socket(socket); in at_getsockopt()
1258 if (sock == RT_NULL) in at_getsockopt()
1270 timeout = sock->recv_timeout; in at_getsockopt()
1276 timeout = sock->send_timeout; in at_getsockopt()
1299 struct at_socket *sock; in at_setsockopt() local
1308 sock = at_get_socket(socket); in at_setsockopt()
1309 if (sock == RT_NULL) in at_setsockopt()
1321 sock->recv_timeout = ((const struct timeval *) optval)->tv_sec * 1000 in at_setsockopt()
1326 sock->send_timeout = ((const struct timeval *) optval)->tv_sec * 1000 in at_setsockopt()