pthread_mutex_unlock(&g_client_ipc_mutex);
}
+static inline int _client_safe_send(int fd, void *message, int length, int flag)
+{
+ int ret, sended=0;
+ while (length) {
+ ret = send(fd, message+sended, length, flag);
+ if (-1 == ret) {
+ if (EINTR == errno)
+ continue;
+ else
+ return ret;
+ }
+ sended += ret;
+ length -= ret;
+ }
+ return sended;
+}
+
+static inline int _client_safe_recv(int fd, void *message, int length)
+{
+ int ret, received=0;
+ while (length) {
+ ret = recv(fd, message+received, length, 0);
+ if (-1 == ret) {
+ if (EINTR == errno)
+ continue;
+ else
+ return ret;
+ }
+ received += ret;
+ length -= ret;
+ }
+ return received;
+}
+
static void net_nfc_client_prepare_sync_call(net_nfc_request_msg_t *msg)
{
net_nfc_client_ipc_lock();
int length;
static uint8_t flushing[128];
- if (recv(g_client_sock_fd, &length, sizeof(length), 0) != sizeof(length))
+ if (_client_safe_recv(g_client_sock_fd, &length, sizeof(length)) != sizeof(length))
{
return 0;
}
while (readbytes > 0)
{
read_size = readbytes > 128 ? 128 : readbytes;
- if (recv(g_client_sock_fd, flushing, read_size, 0) <= 0)
+ if (_client_safe_recv(g_client_sock_fd, flushing, read_size) <= 0)
{
return 0;
}
return 0;
}
/* read */
- if (recv(g_client_sock_fd, *detail, size, 0) <= 0)
+ if (_client_safe_recv(g_client_sock_fd, *detail, size) <= 0)
{
_net_nfc_util_free_mem(*detail);
return 0;
return NULL;
}
- if (recv(g_client_sock_fd, (void *)&(resp_msg->response_type), sizeof(int), 0) != sizeof(int))
+ if (_client_safe_recv(g_client_sock_fd, (void *)&(resp_msg->response_type), sizeof(int)) != sizeof(int))
{
DEBUG_ERR_MSG("reading message is failed");
_net_nfc_util_free_mem(resp_msg);
bool __net_nfc_client_send_msg(void *message, int length)
{
- bool result = (send(g_client_sock_fd, (void *)message, length, MSG_NOSIGNAL) > 0);
+ bool result = (_client_safe_send(g_client_sock_fd, (void *)message, length, MSG_NOSIGNAL) > 0);
if (result == false)
{
/////////////////////////
+static inline int _server_safe_send(int fd, void *message, int length, int flag)
+{
+ int ret, sended=0;
+ while (length) {
+ ret = send(fd, message+sended, length, flag);
+ if (-1 == ret) {
+ if (EINTR == errno)
+ continue;
+ else
+ return ret;
+ }
+ sended += ret;
+ length -= ret;
+ }
+ return sended;
+}
+
+
+static inline int _server_safe_recv(int fd, void *message, int length)
+{
+ int ret, received=0;
+ while (length) {
+ ret = recv(fd, message+received, length, 0);
+ if (-1 == ret) {
+ if (EINTR == errno)
+ continue;
+ else
+ return ret;
+ }
+ received += ret;
+ length -= ret;
+ }
+ return received;
+}
+
+
bool net_nfc_server_set_server_state(uint32_t state)
{
pthread_mutex_lock(&g_server_socket_lock);
bool result = true;
pthread_mutex_lock(&g_server_socket_lock);
- len = send(socket, (void *)message, length, MSG_NOSIGNAL);
+ len = _server_safe_send(socket, (void *)message, length, MSG_NOSIGNAL);
pthread_mutex_unlock(&g_server_socket_lock);
if (len <= 0)
bool net_nfc_server_send_message_to_client(void* message, int length)
{
pthread_mutex_lock(&g_server_socket_lock);
- int leng = send(g_server_info.client_sock_fd, (void *)message, length, 0);
+ int leng = _server_safe_send(g_server_info.client_sock_fd, (void *)message, length, 0);
pthread_mutex_unlock(&g_server_socket_lock);
if(leng > 0)
int net_nfc_server_recv_message_from_client(int client_sock_fd, void* message, int length)
{
- int leng = recv(client_sock_fd, message, length, 0);
+ int leng = _server_safe_recv(client_sock_fd, message, length);
return leng;
}