#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define SERV_PORT 8888
#define BUF_SIZE 100000
int main(int argc, char *argv[])
{
int listend;
int backlog = 10;
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
listend = socket(AF_INET, SOCK_STREAM, 0);
int check_ret = bind(listend, (struct sockaddr *)&servaddr, sizeof(servaddr));
assert(check_ret>=0);
check_ret = listen(listend, backlog);
struct sockaddr_in addressclient;
socklen_t clientlen = sizeof(addressclient);
int connfd = accept(listend, (struct sockaddr *)&addressclient, &clientlen);
assert(connfd>=0);
cout<<"new conn com!"<<endl;
sleep(10);
char buf[BUF_SIZE];
memset(buf, '0', BUF_SIZE);
int w_count = write(connfd, buf, BUF_SIZE);
cout<<"write count:"<<w_count<<endl;
shutdown(connfd, SHUT_WR);
char readbuf[BUF_SIZE];
int res = 0;
for(;;)
{
res = read(connfd, readbuf, 200);
if(!res)
{
break;
}
}
close(connfd);
close(listend);
return 0;
}
nc localhost 8888 | wc -c
参考:https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable