当前位置:  技术问答>linux和unix

[100分]高分求关于linux socket上限解决方案

    来源: 互联网  发布时间:2016-09-25

    本文导语:  我想写一个复用socket的程序,以避免linux里socket最高上限的限制。因为程序是运行在服务器端,只提高linux系统下的socket限制数,是无法满足我的需求。我的代码如下,敬请各位大侠帮忙。 我遇到的问题是:第一次能...

我想写一个复用socket的程序,以避免linux里socket最高上限的限制。因为程序是运行在服务器端,只提高linux系统下的socket限制数,是无法满足我的需求。我的代码如下,敬请各位大侠帮忙。
我遇到的问题是:第一次能够成功连接,并下载数据;但是再次连接就无法连接上。
下面的这个函数是要无限循环运行的。
code:
/*======================*/
BOOL m3u8Parser(char *url) {
// m3u8sSocket是全局变量;
// m3u8stSvrAddrIn是全局变量;
char sndBuf[1024] = { 0 };
char rcvBuf[1024 * 20] = { 0 };
char rcvBufswap[1024 * 20] = { 0 };
int num = 0, len = 0;
int nRet = SOCKET_ERROR;

char IPString[50] = { 0 };
char http_HOST[1024] = { 0 };
char http_GET[1024] = { 0 };
char *ip = NULL;
char path[1024] = { 0 };
char filename[1024] = { 0 };
char *tmp = NULL;
char *content = NULL;
FILE* fp = NULL;
time_t tps, tpe;

getHTTP_HOST(url, http_HOST);
getHTTP_GET(url, http_GET);

getIPString(url, IPString);
//printf("m3u8Parser->getIPString:%sn", IPString);

pthread_mutex_lock(&mutex);
if ((ip = get_IPURLLINKAGE_IP(pIPURLLink, IPString)) == NULL) {
printf("m3u8Parser->pthread_mutex_lock:%sn", ip);
if ((ip = GetIP(IPString)) == NULL) {
printf("m3u8Parser->GetIP->EXIT_FAILUREn");
pthread_mutex_unlock(&mutex);
return FALSE;
}

if (get_IPURLLINKAGE_counter(pIPURLLink) >= MAXIPNUMBER)
remove_ip_url_1st_node(pIPURLLink);

append_ip_url_link_node_trail(pIPURLLink, new_ip_url_link_node(
IPString, ip));
}
pthread_mutex_unlock(&mutex);

if (createSaveDirectory(url, path) != 0) {
errorLoc = 1;
printf("m3u8Parser createSaveDirectoryn");
return FALSE;
}

getFilename(url, filename);

fp = fopen(filename, "wt");
if (fp == NULL) {
errorLoc = 1;
return FALSE;
}

strcat(sndBuf, http_GET);
strcat(sndBuf, http_HOST);
// printf("%sn", sndBuf);

#ifdef WIN32
WSADATA wsaData;
{
if (WSAStartup(0x202, &wsaData) == SOCKET_ERROR)
{
perror("WSAStartup");
return FALSE;
}
}
#endif

m3u8stSvrAddrIn.sin_family = AF_INET;
m3u8stSvrAddrIn.sin_port = htons(80);
m3u8stSvrAddrIn.sin_addr.s_addr = inet_addr(ip);

if (m3u8sSocket == -1) {
m3u8sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
printf("create m3u8Parser sSocket:%dn", m3u8sSocket);
}
printf("m3u8Parser sSocket:%dn", m3u8sSocket);

nRet = connect(m3u8sSocket, (SOCKADDR*) &m3u8stSvrAddrIn, sizeof(SOCKADDR));
        if (SOCKET_ERROR == nRet) {
//errorLoc = 1;
printf(" m3u8Saver connect fail!n");
goto GOEND;
}

nRet = send(m3u8sSocket, (char*) sndBuf, strlen(sndBuf), 0);
//printf("m3u8Parser nRet:%dn", nRet);
//----------------------------------------------
//      while(1){
             //处理接收到的数据。
        }
//----------------------------------------------
shutdown(m3u8sSocket, SHUT_WR);
// close(m3u8sSocket);
fclose(fp);

return TRUE;

GOEND:
// printf("GOENDn");
#ifdef WIN32
WSACleanup();
#endif
fclose(fp);

return FALSE;
}
/*======================*/

|
你贴的是客户端的代码吧?能否连接那得看服务器在干啥了..

|
1、把socket设置成地址和端口都可以重复使用的试试。
2、不能连接的话,报的错误是什么?

|
是不是你的服务器端发完数据后就close了啊?
这样的话,client端需要重新connect。

|
楼主,是刚接触Linux吧。linux里的描述字是不管你是不是释放相应的资源,都会往上涨,到了最大值后又从最小值开始的。包括文件描述字也一样。所以你可以创建一个长连接,每次用非阻塞方式发送数据。

|
估计是你的服务器端发完数据后就close了啊?
这样的话,client端需要重新connect。你好好检查下。

|
程序崩溃和描述字到数字到最大是没关系的,是你的内存资源没释放,造成程序崩溃,描述字就相当一个名字,它的本质是一个数字,你用它去操作相应的对象,但它和对象是不一样的,对象是实的,描述字是虚的。

|
Using open source library - ACE, everything will be ok!

|
该回复于2010-09-02 17:40:36被版主删除

|
该回复于2010-09-02 17:41:13被版主删除

|
帮顶,k不灌水

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3