如何在多进程(不是多线程)里共享socket

sybsyb 2003-01-18 09:12:12
试了n久,发现不行.郁闷
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sybsyb 2003-01-20
  • 打赏
  • 举报
回复
谢谢大家问题已经解决
sybsyb 2003-01-18
  • 打赏
  • 举报
回复
这样还是不行,另一个程序的socket不是用WSPSocket创建的。
而且该函数还不支持98和me
功名半纸 2003-01-18
  • 打赏
  • 举报
回复
使用
int WSPDuplicateSocket (
SOCKET s,
DWORD dwProcessId,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPINT lpErrno
);

并使用共享SOCKET(SHARE),MSDN中有说明!!!
功名半纸 2003-01-18
  • 打赏
  • 举报
回复
使用它的方法是由建立该 Socket 的 A 程序调用WSADuplicateSocket ,先取得系統中的一个 WSAPROTOCOL_INFO 结构,然后再利用微软进程件通讯IPC, Interprocess  Communication),将这个取得的结构传给要分享这个 Socket 的另一 B 程序,接著 B 程序再调用 WSASocket 函数,将收到的 WSAPROTOCOL_INFO结构传給系統,取得一个新的 Socket Descriptor;z这样的步骤完成后,两个程序便可以分享同一个 Socket 了。各个程序件在使用一个 Shared Socket 时,彼此件动作的协调,必须由各个程序间相互负责,Winsock 系統並不为你负责这个协调工作!
功名半纸 2003-01-18
  • 打赏
  • 举报
回复
你是否想在UNIX下一样(fork())启动一子进程处理客户端的请求啊!!!
WinSock 由 Berkeley Socket 发展来的,它们的基本原理一致,所以这部分的实现核心及结构与 Unix 上一致。但由于 WinSock 的特点,程序实现细节仍存在差异。 首先,由于 Windows Sockets 的服务是以动态连接库 WinSock.DLL 形式实现的,所以必须要先调用 WSAStartup() 函数对 Windows Sockets DLL 进行初始化,协商 WinSock 的版本支持,并分配必要的资源。在应用程序关闭套接字后,还应调用 WSACleanup() 终止 Windows Sockets DLL 的使用,并释放资源,以备下次使用。其次, NT 产生子进程的函数 CreateProcess() 实现机制与 Unix 系统中的 fork() 不同, Socket 号不能直接传给子进程,所以父进程须调用函数 WSADuplicateSocket() 获得套接字描述符,使得子进程调用函数 WSASocket() 之后,与父进程共享相同的套接字描述符。其余部分基本与 Unix 相同在WINDOWS WINSOCK1下这样实现不了,但只有WINSOCK 2支持WSPDuplicateSocket !
Pipi0714 2003-01-18
  • 打赏
  • 举报
回复
学学,在多个进程都可以么,为什么不用进程间通信,比如说:油槽或者命名管道
功名半纸 2003-01-18
  • 打赏
  • 举报
回复
只有WINSOCK 2才支持,你在98和ME下可以安装WINSOCK2啊!!!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧