unix中的msg_oob msg_oob in unixc

win下没有unix中的信号, MSG_OOB的解决方式是 使用select 中的异常套接字: exceptfds

关于oob 的解释都在另一篇文章中了.这里不再解释, 仅仅是windows实现

oob_recv.c

// oob_recv.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

#include

#include

#pragma comment(lib, "ws2_32.lib")

#define BUFFSIZE 8192

int _tmain(int argc, char* argv[])

{

WSADATA wsadata;

int err = 0;

if ((err =WSAStartup(MAKEWORD(2, 2), &wsadata) )!= 0){

printf("startup error : %d\n", err);

return 0;

}

SOCKADDR_IN serv_addr, client_addr;

memset(&serv_addr, 0, sizeof(serv_addr));

memset(&client_addr, 0, sizeof(client_addr));

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(9988);

serv_addr.sin_family = AF_INET;

SOCKET hListenSocket = socket(AF_INET, SOCK_STREAM, 0);

if (bind(hListenSocket, (SOCKADDR*)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR)

{

_tprintf(TEXT("bind error :%d\n"), WSAGetLastError());

closesocket(hListenSocket);

WSACleanup();

return 0;

}

if (SOCKET_ERROR == listen(hListenSocket, 10)){

_tprintf(TEXT("listen error :%d\n"), WSAGetLastError());

closesocket(hListenSocket);

WSACleanup();

}

int client_len = sizeof(client_addr);

SOCKET hRecvSocket = accept(hListenSocket, (SOCKADDR*)&client_addr,&client_len);

printf("ip:%s\n",inet_ntoa(client_addr.sin_addr));

fd_set read_set, except_set,rset,eset;

FD_ZERO(&read_set);

FD_ZERO(&except_set);

FD_SET(hRecvSocket, &read_set);

FD_SET(hRecvSocket, &except_set);

struct timeval timeout;

timeout.tv_sec = 5;

timeout.tv_usec = 0;

int n = 0 , strlen = 0;

char buf[BUFFSIZE];

while (1)

{

rset = read_set;

eset = except_set;

n = select(0,&rset,NULL,&eset,&timeout);

if (0 == n){

puts("timeout~");

continue;

}

else if (SOCKET_ERROR == n){

printf("error : %d\n", WSAGetLastError());

continue;

}

else {

//OOB 数据

if (FD_ISSET(hRecvSocket, &eset)){

strlen = recv(hRecvSocket, buf, BUFFSIZE - 1, MSG_OOB);

if (0 == strlen){

puts("on recv oob data , peer closed");

closesocket(hRecvSocket);

break;

}

printf("oob data len :%d\n", strlen);

buf[strlen] = 0;

printf("oob data buf :%s\n", buf);

}

//普通数据

if (FD_ISSET(hRecvSocket, &rset)){

strlen = recv(hRecvSocket, buf, BUFFSIZE - 1, 0);

if (0 == strlen){

puts("on recv nornal data , peer closed");

closesocket(hRecvSocket);

break;

}

buf[strlen] = 0;

printf("normal data : %s\n", buf);

}

}

}

closesocket(hListenSocket);

WSACleanup();

return 0;

}

oob_send.c

// sock.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

#include

#include

#pragma comment(lib, "ws2_32.lib")

int _tmain(int argc, char* argv[])

{

WSADATA wsadata;

int err = 0;

if ((err = WSAStartup(MAKEWORD(2, 2), &wsadata)) != 0){

printf("startup error:%d\n", err);

return 0;

}

SOCKET hSock = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN send_addr;

memset(&send_addr, 0, sizeof(send_addr));

send_addr.sin_family = AF_INET;

send_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

send_addr.sin_port = htons(9988);

if (SOCKET_ERROR == connect(hSock, (SOCKADDR*)&send_addr, sizeof(send_addr))){

_tprintf(TEXT("connect error , errno:%ld\n"),WSAGetLastError());

closesocket(hSock);

WSACleanup();

return 0;

}

puts("connect success");

char buf1[] = "data1", buf2[] = "data2";

char oob_buf1[] = "oob_data1", oob_buf2[] = "oob_data2";

send(hSock, buf1, strlen(buf1), 0);

//oob

send(hSock, oob_buf1, strlen(oob_buf1), MSG_OOB);

send(hSock, buf2, strlen(buf2), 0);

//oob

send(hSock, oob_buf2, strlen(oob_buf2), MSG_OOB);

closesocket(hSock);

WSACleanup();

return 0;

}

php msg oob,MSG_OOB winsock相关推荐

  1. WinSock异步编程

    WinSock异步编程 文章目录 WinSock异步编程 简介 WSAAsyncSelect Finger协议 Finger服务器程序 Finger客户端程序 简介 同步 每个函数在下一条语句执行以前 ...

  2. 远程控制 vc++实现

    from:http://club.cimgoo.com/forum.php?mod=viewthread&tid=76 本人有类似的软件VC源码,要的可以EMAIL:278250658#qq. ...

  3. windows下的libutp测试代码

      libutp的github上仅有Linux版本的测试代码,在此分享一个个人修改的windows版测试代码,代码较为简陋,仅供参考. 服务器端 // vim:set ts=4 sw=4 ai:/** ...

  4. Winsock编程宝典(转帖)

    --简单的 Winsock 应用程式设计 TCP连接建立与关闭 相信各位读者现在对於 Winsock 的定义.系统环境,以及一些 Winsock Stack及 Winsock 应用程式,都有基本的认识 ...

  5. WinSock学习笔记

    Socket(套接字) ◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于进行网络通信两端的插座,只要对方的Sock ...

  6. Winsock 函数

    ● 文 / 林军鼐 [简介] 本系统(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日 公布之 WINSOCK 第1.1版(如附录)中所定义之函式 ( ...

  7. WinSock控件及WinSockAPI

    WinSock简介       Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络 ...

  8. winsock的两篇文章

    WinSock学习笔记(一) 作者:肖进 Socket(套接字) ◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于 ...

  9. Windows下的网络编程Winsock

    文章目录 前言 1.服务器下的Winsock 1.1.构建编程环境: 1.2.WSAData结构体 1.3.WSAStartup初始化Winsock 1.4.WSACleanup释放Winsock 1 ...

  10. WinSock网络编程实用宝典(一)

    一.TCP/IP 体系结构与特点    1.TCP/IP体系结构   TCP/IP协议实际上就是在物理网上的一组完整的网络协议.其中TCP是提供传输层服务,而IP则是提供网络层服务.TCP/IP包括以 ...

最新文章

  1. 今天,进程告诉我线程它它它它不想活了
  2. 微软2022新bug:大量程序员连夜加班,只因日期数据溢出
  3. python使用教程pandas-「Python」pandas入门教程
  4. PyTorch中MaxPool的ceil_mode属性
  5. 队列判空_三分钟基础:什么是队列?
  6. linux显示文本文件指定行数的数据
  7. numpy教程:基本输入输出和文件输入输出Input and output
  8. React 16.7.0-alpha hooks 之规则
  9. android 类似按键精灵脚本_脚本编辑器 -- 按键精灵 #Android
  10. html制作答题卡表格,Excel怎么制作试卷答题卡,单选框和复选框制作就这么简单-excel操作练习题...
  11. 想开发一个在线的合同模板管理套件
  12. python3.0下载官网_python下载 v3.7.0 官方正式版
  13. 网络工程师必备 5款网络故障排除工具
  14. 344个四階奇偶幻方按序排列(上)
  15. 获取浏览器窗口高度和宽度兼容IE
  16. Linux使用uinput实现虚拟鼠标
  17. EXCEL表格-“魔法操作”之智能填充(数据提取)
  18. 如何查看NVIDIA显卡显存使用率
  19. 微信小程序-B站:wxml和wxss文件
  20. 大众点评的大数据实践

热门文章

  1. 华为p20支持手机云闪付吗_华为哪些手机支持云闪付
  2. C#编写中英文虚拟键盘
  3. win7计算机图标缩在,win7桌面图标怎么变小?win7桌面图标变小解决方法
  4. Vue3 Mixin的使用方法(全局,局部,setup内部使用)
  5. 3.并列句的起源与本质
  6. Android 函数响应式编程(RxJava3)
  7. javascript英语单词音节拆分_英语单词音节的划分法
  8. python 协程加多线程下载asyncio、ThreadPoolExecutor
  9. linux 下 批量添加后缀名,Linux下批量修改后缀名
  10. 图片识别转公式,GitHub 又一 LaTeX 神器面世!