社区
Linux/Unix社区
帖子详情
如何回传生成的socket??
superrg
2004-08-19 03:46:47
socket(AF_INET,SOCK_STREAM,0)创建一个socket对象,想把生成的对象传出,但没有成功,请问应该如何实现?
原函数如下:
bool tcpsocket(int *fd)
{
return ((*fd = socket(AF_INET,SOCK_STREAM,0)) >= 0);
}
结果发现fd的指针已改变,外面无法访问。。。
...全文
109
11
打赏
收藏
如何回传生成的socket??
socket(AF_INET,SOCK_STREAM,0)创建一个socket对象,想把生成的对象传出,但没有成功,请问应该如何实现? 原函数如下: bool tcpsocket(int *fd) { return ((*fd = socket(AF_INET,SOCK_STREAM,0)) >= 0); } 结果发现fd的指针已改变,外面无法访问。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blankman
2004-08-19
打赏
举报
回复
强! pacman2000(pacman)(影子传说)
我们都局限在一个小圈子里了
再说就一条语句划得来写一个函数吗?函数调用、参数压栈出栈都是要花费时间得
pacman2000
2004-08-19
打赏
举报
回复
直接当int返回啊。
blankman
2004-08-19
打赏
举报
回复
我把你的代码简化了一下,跟踪没有发生异常变化
参考一下下面的方法吧,出去一下,一会儿回来看
我以前用delphi的时候出现过类似莫名其妙的错误,
你把几条无关的语句调换一下位置,删掉所有目标文件
重新编译一下,也许会解决这个问题,
我先看测试一下这个语句
#include <sys/socket.h>
#include <sys/socket.h>
bool tcpsocket(int *fd)
{
return ((*fd = socket(AF_INET,SOCK_STREAM,0)) >= 0);
}
bool createserver(char *IP, int port,int *listen_socket)
{
if (!tcpsocket(listen_socket))
{
return false;
}
//到此处listen_socket被修改,导致内存无法访问
return true;
}
int main(void)
{
int fd = 0;
createserver("i[", 10000, &fd);
return 0;
}
superrg
2004-08-19
打赏
举报
回复
to blankman(菜鸟):
我用gdb跟踪进createserver函数中,发现
if (!tcpsocket(listen_socket))
{
return false;
}
//到此处listen_socket指针指向被修改,导致内存无法访问
以致后面调用tcpbind时,listen_socket无效。。。
blankman
2004-08-19
打赏
举报
回复
或者这样return (((*fd) = socket(AF_INET,SOCK_STREAM,0)) >= 0);
但是 * 的优先级比 = 要高啊,没道理啊
blankman
2004-08-19
打赏
举报
回复
very very sorry!看错了,
应该没有什么问题啊
是 listen_socket 的值被修改了吗?
我以前用delphi的时候出现过类似莫名其妙的错误,
你把几条无关的语句调换一下位置,删掉所有目标文件
重新编译一下,也许会解决这个问题,
我先看测试一下这个语句
blankman
2004-08-19
打赏
举报
回复
首先,单从程序语法的方面来看,bool tcpsocket(int *fd)这样定义
的函数调用的时候应该传入指针或者指针类型的变量,而不是一个结构类型
的变量;
其次,结构类型是不能直接赋值的,不知道你是怎么成功的;
最后,socket()返回的是一个int类型的叫做“文件描述符”的东西,
而不是一个结构类型的变量,其他函数使用的也有问题,建议看一下相关的
知识,增强对socket和socket系列函数的理解
http://www.fanqiang.com/a4/b7/20010508/111655.html
调用的时候应该是这样的
int socketfd = 0;
....
if (!tcpsocket(&socketfd))
{
return false;
}
....
superrg
2004-08-19
打赏
举报
回复
外面是这样写的:
int listensocket;
if (!createserver(NULL,1080,&listensocket))
{
printf("create test server error!\n");
return;
}
blankman
2004-08-19
打赏
举报
回复
指针怎么会改变呢???
应该是指针的内容改变了才对啊 *fd 改变了
产生的 socket 的号码直接就可以从 *fd 返回了啊,
因为修改的是传进来的内存区域
外面你怎么写的?
是不是
......
int sfd;
tcpsocket(&sfd);
superrg
2004-08-19
打赏
举报
回复
是这个意思:
我封装了一个创建server的子函数,定义如下:
bool createserver(char *IP, int port,int *listen_socket)
{
struct sockaddr_in listen_addr;
if (!tcpsocket(listen_socket))
{
return false;
}
//到此处listen_socket被修改,导致内存无法访问
if (!bindaddr(&listen_addr,IP,port))
{
return false;
}
if (!tcpbind(listen_socket,&listen_addr))
{
return false;
}
return true;
}
我是想通过createserver能按传址方式返回socket
铖邑
2004-08-19
打赏
举报
回复
什么意思?当然可以返回了。
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的啊aas...
socket
编程知识详解
什么是
socket
?
socket
的原意是“插座”,在计算机通信领域,
socket
被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过
socket
这种约定,一台计算机可以接收其他计算机的数据,也可以向其他...
Dubbo底层采用
Socket
进行通信详解
由于Dubbo底层采用
Socket
进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下。 n 通信理论 计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。 1.一组信息(通常...
【计算机网络 23】
Socket
技术详解
一、什么是
Socket
在计算机通信领域,
socket
被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过
socket
这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
socket
...
Socket
技术详解(一篇就够了)
Socket
原理 1、什么是
Socket
在计算机通信领域,
socket
被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过
socket
这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送...
Linux/Unix社区
23,120
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章