php msg oob,MSG_OOB winsock
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相关推荐
- WinSock异步编程
WinSock异步编程 文章目录 WinSock异步编程 简介 WSAAsyncSelect Finger协议 Finger服务器程序 Finger客户端程序 简介 同步 每个函数在下一条语句执行以前 ...
- 远程控制 vc++实现
from:http://club.cimgoo.com/forum.php?mod=viewthread&tid=76 本人有类似的软件VC源码,要的可以EMAIL:278250658#qq. ...
- windows下的libutp测试代码
libutp的github上仅有Linux版本的测试代码,在此分享一个个人修改的windows版测试代码,代码较为简陋,仅供参考. 服务器端 // vim:set ts=4 sw=4 ai:/** ...
- Winsock编程宝典(转帖)
--简单的 Winsock 应用程式设计 TCP连接建立与关闭 相信各位读者现在对於 Winsock 的定义.系统环境,以及一些 Winsock Stack及 Winsock 应用程式,都有基本的认识 ...
- WinSock学习笔记
Socket(套接字) ◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于进行网络通信两端的插座,只要对方的Sock ...
- Winsock 函数
● 文 / 林军鼐 [简介] 本系统(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日 公布之 WINSOCK 第1.1版(如附录)中所定义之函式 ( ...
- WinSock控件及WinSockAPI
WinSock简介 Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络 ...
- winsock的两篇文章
WinSock学习笔记(一) 作者:肖进 Socket(套接字) ◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于 ...
- Windows下的网络编程Winsock
文章目录 前言 1.服务器下的Winsock 1.1.构建编程环境: 1.2.WSAData结构体 1.3.WSAStartup初始化Winsock 1.4.WSACleanup释放Winsock 1 ...
- WinSock网络编程实用宝典(一)
一.TCP/IP 体系结构与特点 1.TCP/IP体系结构 TCP/IP协议实际上就是在物理网上的一组完整的网络协议.其中TCP是提供传输层服务,而IP则是提供网络层服务.TCP/IP包括以 ...
最新文章
- 今天,进程告诉我线程它它它它不想活了
- 微软2022新bug:大量程序员连夜加班,只因日期数据溢出
- python使用教程pandas-「Python」pandas入门教程
- PyTorch中MaxPool的ceil_mode属性
- 队列判空_三分钟基础:什么是队列?
- linux显示文本文件指定行数的数据
- numpy教程:基本输入输出和文件输入输出Input and output
- React 16.7.0-alpha hooks 之规则
- android 类似按键精灵脚本_脚本编辑器 -- 按键精灵 #Android
- html制作答题卡表格,Excel怎么制作试卷答题卡,单选框和复选框制作就这么简单-excel操作练习题...
- 想开发一个在线的合同模板管理套件
- python3.0下载官网_python下载 v3.7.0 官方正式版
- 网络工程师必备 5款网络故障排除工具
- 344个四階奇偶幻方按序排列(上)
- 获取浏览器窗口高度和宽度兼容IE
- Linux使用uinput实现虚拟鼠标
- EXCEL表格-“魔法操作”之智能填充(数据提取)
- 如何查看NVIDIA显卡显存使用率
- 微信小程序-B站:wxml和wxss文件
- 大众点评的大数据实践
热门文章
- 华为p20支持手机云闪付吗_华为哪些手机支持云闪付
- C#编写中英文虚拟键盘
- win7计算机图标缩在,win7桌面图标怎么变小?win7桌面图标变小解决方法
- Vue3 Mixin的使用方法(全局,局部,setup内部使用)
- 3.并列句的起源与本质
- Android 函数响应式编程(RxJava3)
- javascript英语单词音节拆分_英语单词音节的划分法
- python 协程加多线程下载asyncio、ThreadPoolExecutor
- linux 下 批量添加后缀名,Linux下批量修改后缀名
- 图片识别转公式,GitHub 又一 LaTeX 神器面世!