中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 有遇到过带四个参数的socket创建函数吗
作者:
标题: 有遇到过带四个参数的socket创建函数吗 上一主题 | 下一主题
tianmian
初级用户





积分 100
发帖 41
注册 2007-12-6
状态 离线
『楼 主』:  有遇到过带四个参数的socket创建函数吗

最近要开发基于dlink tcp/ip协议的dos网络程序,碰到一个问题,该协议的socket创建函数带四个参数,函数原型如下:short socket(short type,short family,char far *rp,int rsize),我尝试将后面两个参数全置零,和设置成一定的数据大小的时候,发送和接收全都进入一直阻塞状态。没什么办法,还请版上各位大虾发表高见啊!

2008-5-27 10:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 2 楼』:  

从函数的结构上看——
第一个参数是类型码(BYTE)。
第二个参数是家族码(BYTE)。
第三个参数是个长指针(正常是DWORD),指向一个数据块
第四个参数很显然是这个数据块的长度(WORD)
至于类型码、家族码的含义,数据块的格式你没有提供资料无法分析。最关键的当然是数据块了,你把数据块指针指向NULL,长度为0很显然啥事也完成不了。

[ Last edited by netwinxp on 2008-5-27 at 02:16 PM ]

2008-5-27 14:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tianmian
初级用户





积分 100
发帖 41
注册 2007-12-6
状态 离线
『第 3 楼』:  

是啊,是啊,我也这样想的,当纵观整个开发包,都没有这样一个数据结构,而且函数中的类型是char类型的
还有我有个问题,因为一般用于udp,tcp收发数据的缓冲区应该在tcp/ip协议栈或者网卡上的内存中实现的吧,这里为何是在程序中创建呢?

2008-5-27 15:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 4 楼』:  

函数类型是char,表明该函数代返回码(具体返回码的含义未知),大多数板卡其内部的空间大部分是ROM,所以数据缓冲区基本要设在在内存(比如键盘缓冲区、INT 13H扩展的DAP包等)。另外协议栈本身并不知道你所要发送的数据,所以它会从你的数据包指针指向的空间获得数据或者把数据填充到你的数据包指针指向的空间。
作为开发库如果不带有调用说明,则建议你放弃该开发库。

[ Last edited by netwinxp on 2008-5-27 at 03:20 PM ]

2008-5-27 15:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tianmian
初级用户





积分 100
发帖 41
注册 2007-12-6
状态 离线
『第 5 楼』:  

就比方说我们通常用的只有三个参数的socket创建函数,创建一个socket接口,然后通过此接口收发数据,这个过程我们并没关注去分配收发数据缓冲区的问题,我想这个应该是在tcp/ip协议栈已经建立好的一块数据区域。我们通过send函数发送数据的时候,send函数负责将我们要传输的数据去填充这样一块收发缓冲区数据接口。

所以我感觉在我们自己的程序中去分配这样一块收发缓冲区的说法有点说不过去的

2008-5-27 15:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 6 楼』:  

这个很难说,各有各的好处,如果缓冲区用用户的数据区酱紫的好处是可以同时使用很多个缓冲区,在转换过程只需改变指针即可,如果所有数据全用同一个数据区当有多个任务或者数据量特别大的时候容易出现堵塞,另外也不利于多任务(需要为每个任务创建一个缓冲区副本)。其实WINDOWS在创建一个每个socket的时候也会同时创建一个缓冲区副本,只不过它不让你直接访问,需要通过句柄来操作(这是WINDOWS通病),其实句柄和指针的意义差别不大,个人认为居于缓冲区指针显然比居于句柄要灵活多了。

2008-5-28 18:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: