当前位置: 首页 > news >正文

电子商务网站分类中国500强企业名称

电子商务网站分类,中国500强企业名称,外包加工网官网下载安装,做网站做得好的公司有哪些我正在移植构建在ACE Proactor框架之上的应用程序.该应用程序适用于VxWorks和Windows,但在使用librt的内核2.6.X.X的Linux(CentOS 5.5,WindRiver Linux 1.4和3.0)上无法运行.我把问题缩小到一个非常基本的问题#xff1a;应用程序在套接字上开始异步(通过aio_read)读取操作,然…我正在移植构建在ACE Proactor框架之上的应用程序.该应用程序适用于VxWorks和Windows,但在使用librt的内核2.6.X.X的Linux(CentOS 5.5,WindRiver Linux 1.4和3.0)上无法运行.我把问题缩小到一个非常基本的问题应用程序在套接字上开始异步(通过aio_read)读取操作,然后在同一个套接字上开始异步(通过aio_write)写入.由于协议是从应用程序结束初始化的,因此无法实现读取操作.– 当套接字处于阻塞模式时,永远不会写入并且协议“挂起”.– 使用O_NONBLOCK套接字时,写入成功,但读取无限期地返回“EWOULDBLOCK / EAGAIN”错误,永远不会恢复(即使重新启动AIO操作).我经历了多个论坛,无法找到一个明确的答案,说明这是否应该可行(而且我做错了)或Linux AIO不可能.是否可以放弃AIO并寻求不同的实现(通过epoll / poll / select等)附件是一个示例代码,可以在非阻塞套接字上快速重现问题#include #include #include #include #include #include #include #include #include #include #define BUFSIZE (100)// Global variablesstruct aiocb *cblist[2];int theSocket;void InitializeAiocbData(struct aiocb* pAiocb, char* pBuffer){bzero( (char *)pAiocb, sizeof(struct aiocb) );pAiocb-aio_fildes theSocket;pAiocb-aio_nbytes BUFSIZE;pAiocb-aio_offset 0;pAiocb-aio_buf pBuffer;}void IssueReadOperation(struct aiocb* pAiocb, char* pBuffer){InitializeAiocbData(pAiocb, pBuffer);int ret aio_read( pAiocb );assert (ret 0);}void IssueWriteOperation(struct aiocb* pAiocb, char* pBuffer){InitializeAiocbData(pAiocb, pBuffer);int ret aio_write( pAiocb );assert (ret 0);}int main(){int ret;int nPort 11111;char* szServer 10.10.9.123;// Connect to the remote servertheSocket socket(AF_INET, SOCK_STREAM, 0);assert (theSocket 0);struct hostent *pServer;struct sockaddr_in serv_addr;pServer gethostbyname(szServer);bzero((char *) serv_addr, sizeof(serv_addr));serv_addr.sin_family AF_INET;serv_addr.sin_port htons(nPort);bcopy((char *)pServer-h_addr, (char *)serv_addr.sin_addr.s_addr, pServer-h_length);assert (connect(theSocket, (const sockaddr*)(serv_addr), sizeof(serv_addr)) 0);// Set the socket to be non-blockingint oldFlags fcntl(theSocket, F_GETFL) ;int newFlags oldFlags | O_NONBLOCK;fcntl(theSocket, F_SETFL, newFlags);printf(Socket flags: before%o, after%o\n, oldFlags, newFlags);// Construct the AIO callbacks arraystruct aiocb my_aiocb1, my_aiocb2;char* pBuffer new char[BUFSIZE1];bzero( (char *)cblist, sizeof(cblist) );cblist[0] my_aiocb1;cblist[1] my_aiocb2;// Start the read and write operations on the same socketIssueReadOperation(my_aiocb1, pBuffer);IssueWriteOperation(my_aiocb2, pBuffer);// Wait for I/O completion on both operationsint nRound 1;printf(\naio_suspend round #%d:\n, nRound);ret aio_suspend( cblist, 2, NULL );assert (ret 0);// Check the error status for the read and write operationsret aio_error(my_aiocb1);assert (ret EWOULDBLOCK);// Get the return code for the read{ssize_t retcode aio_return(my_aiocb1);printf(First read operation results: aio_error%d, aio_return%d - Thats the first EWOULDBLOCK\n, ret, retcode);}ret aio_error(my_aiocb2);assert (ret EINPROGRESS);printf(Write operation is still \in progress\\n);// Re-issue the read operationIssueReadOperation(my_aiocb1, pBuffer);// Wait for I/O completion on both operationsprintf(\naio_suspend round #%d:\n, nRound);ret aio_suspend( cblist, 2, NULL );assert (ret 0);// Check the error status for the read and write operations for the second timeret aio_error(my_aiocb1);assert (ret EINPROGRESS);printf(Second read operation request is suddenly marked as \in progress\\n);ret aio_error(my_aiocb2);assert (ret 0);// Get the return code for the write{ssize_t retcode aio_return(my_aiocb2);printf(Write operation has completed with results: aio_error%d, aio_return%d\n, ret, retcode);}// Now try waiting for the read operation to complete - itll just busy-wait, receiving EWOULDBLOCK indefinitelydo{printf(\naio_suspend round #%d:\n, nRound);ret aio_suspend( cblist, 1, NULL );assert (ret 0);// Check the error of the read operation and re-issue if neededret aio_error(my_aiocb1);if (ret EWOULDBLOCK){IssueReadOperation(my_aiocb1, pBuffer);printf(EWOULDBLOCK again on the read operation!\n);}}while (ret EWOULDBLOCK);}提前致谢,Yotam.解决方法:首先,O_NONBLOCK和AIO不混合.当相应的读或写不会被阻塞时,AIO将报告异步操作完成 – 并且使用O_NONBLOCK,它们永远不会阻塞,因此aio请求将始终立即完成(使用aio_return()给出EWOULDBLOCK).其次,不要为两个同时发生的未完成的aio请求使用相同的缓冲区.在发出aio请求的时间和aio_error()告诉你已完成的时间之间,缓冲区应被视为完全禁止.第三,AIO对同一文件描述符的请求排队,以便给出明智的结果.这意味着在读取完成之前不会发生写入 – 如果您需要先写入数据,则需要以相反的顺序发出AIO.以下工作正常,无需设置O_NONBLOCKstruct aiocb my_aiocb1, my_aiocb2;char pBuffer1[BUFSIZE1], pBuffer2[BUFSIZE1] Some test message;const struct aiocb *cblist[2] { my_aiocb1, my_aiocb2 };// Start the read and write operations on the same socketIssueWriteOperation(my_aiocb2, pBuffer2);IssueReadOperation(my_aiocb1, pBuffer1);// Wait for I/O completion on both operationsint nRound 1;int aio_status1, aio_status2;do {printf(\naio_suspend round #%d:\n, nRound);ret aio_suspend( cblist, 2, NULL );assert (ret 0);// Check the error status for the read and write operationsaio_status1 aio_error(my_aiocb1);if (aio_status1 EINPROGRESS)puts(aio1 still in progress.);elseputs(aio1 completed.);aio_status2 aio_error(my_aiocb2);if (aio_status2 EINPROGRESS)puts(aio2 still in progress.);elseputs(aio2 completed.);} while (aio_status1 EINPROGRESS || aio_status2 EINPROGRESS);// Get the return code for the readssize_t retcode;retcode aio_return(my_aiocb1);printf(First operation results: aio_error%d, aio_return%d\n, aio_status1, retcode);retcode aio_return(my_aiocb1);printf(Second operation results: aio_error%d, aio_return%d\n, aio_status1, retcode);或者,如果您不关心相互之间的读取和写入,您可以使用dup()为套接字创建两个文件描述符,并使用一个用于读取而另一个用于写入 – 每个都将具有AIO操作单独排队.标签linux,sockets,kernel,nonblocking,aio来源 https://codeday.me/bug/20190630/1340573.html
http://www.huolong8.cn/news/432787/

相关文章:

  • 荣昌网站建设上海 企业 网站建设
  • 江阴市建设局网站seo的流程是怎么样的
  • 做网站报价城市中国商业网站平台
  • wordpress建站wifi网站开发追款单
  • 做高仿包的网站有哪些网站的优化通过什么做上去
  • 备案通过后 添加网站做网站还有搞头吗
  • 企业网站建设相关书籍巴彦淖尔网站制作开发
  • 自学做网站多久网络app制作网站有哪些内容
  • 免费建网站在那里好扬州建网站
  • 淘宝客网站建设方案书创建一个自己的公司的英文
  • 营销型网站建设有哪些建站流程网页设计表格模板源代码
  • 上海这边敲墙拆旧做啥网站的比较多惠州小程序推广
  • 公司网站开发视频教程网站建设包含哪些
  • 国外ip代理网站加上视频对seo影响
  • 海淀西北旺网站建设如何写网站优化方案
  • wordpress自定义参数查询个人网站可以做seo吗
  • 移动网站建站深圳龙岗网站建设培训学校
  • 杭州做邮票的公司网站长沙专业建设网站企业
  • 企业网站后台管理系统模板下载十大黄金软件app
  • 松原市城乡建设局网站怎样做平台销售
  • wordpress纯代码注册验证廊坊百度seo公司
  • 店铺的网站怎么做关于校园推广的软文
  • 360免费做网站电话seo顾问多少钱
  • 婴儿衣服做的网站好做网站用php还是python
  • 城市门户网站网站优化前景
  • 云南网站建设优化网站建设栏目分级
  • 专业网站建设案例网站建设我要自学网
  • wordpress分类搜索semseo是什么意思
  • 园区做网站湖州企业网站制作
  • 网站开发会遇到哪些问题网站分析与优化的文章