#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h> #include <string.h>
#include <assert.h>
#include <iostream> void signal_func(int sig)
{
int saved_errno = errno;
std::cout << "broken pipe!" << std::endl;
errno = saved_errno;
} int main()
{
struct sigaction sa;
sa.sa_handler = signal_func; sigemptyset(&sa.sa_mask);
sa.sa_flags = ; if (sigaction(SIGPIPE, &sa, NULL) < )
{
perror("cannot ignore SIGPIPE"); return -;
} int sockfd = socket(AF_INET, SOCK_STREAM, );
uint16_t port = ;
const char* ip= "192.168.16.105"; assert(sockfd > ); struct sockaddr_in sock_address;
memset(&sock_address, , sizeof(sock_address)); sock_address.sin_family = AF_INET;
sock_address.sin_port = htons();
inet_pton(AF_INET, ip, &(sock_address.sin_addr)); socklen_t sock_len = sizeof(sock_address); int ret = connect(sockfd, (sockaddr*)&sock_address, sock_len);
assert(ret != -); sleep(); // 在sleep之前断开服务端连接 char send_buff[] = "hello server!";
char recv_buff[] = {}; ssize_t ret_1 = send(sockfd, send_buff, strlen(send_buff), ); // 收到对端FIN后依然可以发送成功 不过对端会响应RST if (ret_1 < )
{
std::cout << strerror(errno) << std::endl;
}
else
{
std::cout << "send success!" << std::endl;
} ssize_t ret_2 = recv(sockfd, recv_buff, sizeof(recv_buff), ); if(ret_2 == )
{
std::cout << "remote close connection" << std::endl;
} ssize_t ret_3 = send(sockfd, send_buff, strlen(send_buff), ); // 这时再send会出错 并产生SIGPIPE信号 默认终止进程 if(ret_3 < )
{
if (errno == EPIPE)
{
std::cout << strerror(errno) << std::endl;
}
}
else
{
std::cout << "send success" << std::endl;
} return ;
}

最新文章

  1. 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁
  2. SQL查询语句执行速度快,存储过程执行慢
  3. SpringMVC对异常进行全局处理,并区分对待ajax和普通请求
  4. makefile多目录的.c 格式.cpp混合编译
  5. https协议
  6. java 导入包
  7. 【HDOJ】【2829】Lawrence
  8. 常见web服务器错误
  9. C# dynamic
  10. Java-工厂设计模式
  11. unity tips
  12. 加密PHP文件的方式,目测这样可以写个DLL来加密了
  13. UIDatePicker 时间滚动表
  14. 常用 SQL语句
  15. Nginx Image Module图片缩略图 水印处理模块
  16. JSON 转换异常 multipartRequestHandler servletWrapper
  17. go runtime.Gosched()的作用分析
  18. TIScript 代码Demo
  19. jenkins自动部署到tomcat报错:ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception
  20. su: cannot set user id: Resource temporarily unavailable【转】

热门文章

  1. vs中web配置可浏览json数据文件
  2. IOS7学习之路一(新UI之自定义UITableViewCell)
  3. 如何用程序删除win 7下SYSTEM权限的目录
  4. 映射请求到Servlet
  5. java常用的环境变量配置
  6. 虚拟化平台cloudstack新版本的调试
  7. MSBuild是什么?
  8. WCF服务承载
  9. TOGAF架构内容框架之架构制品(上)
  10. hadoop-1.1.0 rpm + centos 6.3 64虚拟机 + JDK7 搭建分布式集群