关于套接字的send/recv的初级问题 很初级 初学者困惑

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:08:09
本人刚学到socket网络编程 对于send和recv函数有困惑
1 send函数有个参数表明要传递的字节数 如果一次传递不完 需要程序员自己下次继续调用send 是不是?

2 send函数返回0表明什么?

3 recv函数接收数据的时候 什么时候会返回 这个问题困惑我很久了 比如send函数发送一个完整的消息 但是消息没有发送完 send就返回了 这个时候recv会返回吗?还是等到send发送完一整个消息后 recv才返回? recv如何知道send函数会传递来多少字节的消息呢?

对于 send/recv函数 何时返回 我一直有困惑 书上说的很不清楚 send函数我知道经常因为各种原因 会发送不完应该发送的数据就返回了 但是这个时候对方的recv是什么情况呢? 是send返回 recv就返回 还是什么情况下返回?

希望有经验的朋友详细的和我说说 帮我指点迷津 我一定会追加分的
1L的朋友 Send一次发不完数据会自动接着发? 不是吧 怎么1个人1个答案 很多人是要程序员写个循环 进行比对 如果send的返回值和缓冲区待发送的数据不同 就要继续发送 谁给个最终答复

#include <string.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

#define LINE 2048

pthread_mutex_t work = PTHREAD_MUTEX_INITIALIZER;

struct sockaddr_in tcpsock, udpsock;

void *handle_tcp(void *arg)
{
int tcpfd = *((int *)arg);
int tcpcon;
int n;
char *suc = "success";
socklen_t len = 0;
struct sockaddr_in tcpcli;
listen(tcpfd, 20);
char str[INET_ADDRSTRLEN];
char buf[LINE];

while(1)
{
len = sizeof(tcpcli);
tcpcon = accept(tcpfd, (struct sockaddr*)&tcpcli, &len);
pthread_mutex_lock(&work);
printf("receive from %s at port %d\n",
inet_ntop(PF_INET, &tcpcli.sin_addr, str, sizeof(str)),
ntohs(tcpcli.sin_port));
pthread_mutex_unlock(&work);