<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    這是6.0之前的poll模型。
    solaris\native\sun\nio\ch\SocketChannelImpl.c
    JNIEXPORT?jint?JNICALL
    Java_sun_nio_ch_SocketChannelImpl_checkConnect(JNIEnv?
    *env,?jobject?this,
    ???????????????????????????jobject?fdo,?jboolean?block,
    ???????????????????????????????????????????????jboolean?ready)
    {
    ????
    int?error?=?0;
    ????
    int?n?=?sizeof(int);
    ????jint?fd?
    =?fdval(env,?fdo);
    ????
    int?result?=?0;
    ????struct?pollfd?poller;

    ????poller.revents?
    =?1;
    ????
    if?(!ready)?{
    ????????poller.fd?
    =?fd;
    ????????poller.events?
    =?POLLOUT;
    ????????poller.revents?
    =?0;
    ????????result?
    =?poll(&poller,?1,?block???-1?:?0);
    ????????
    if?(result?<?0)?{
    ????????????JNU_ThrowIOExceptionWithLastError(env,?
    "Poll?failed");
    ????????????
    return?IOS_THROWN;
    ????????}
    ????
    if?(!block?&&?(result?==?0))
    ????????
    return?IOS_UNAVAILABLE;
    ????}

    ????
    if?(poller.revents)?{
    ????????errno?
    =?0;
    ????????result?
    =?getsockopt(fd,?SOL_SOCKET,?SO_ERROR,?&error,?&n);
    ????????
    if?(result?<?0)?{
    ????????????handleSocketError(env,?errno);
    ????????????
    return?JNI_FALSE;
    ????????}?
    else?if?(error)?{
    ????????????handleSocketError(env,?error);
    ????????????
    return?JNI_FALSE;
    ????????}
    ????????
    return?1;
    ????}
    ????
    return?0;
    }


    6.0缺省的模型是使用epoll
    E:\Java\jdk-6-rc-src\j2se\src\solaris\native\sun\nio\ch\EPollArrayWrapper.c

    JNIEXPORT?void?JNICALL
    Java_sun_nio_ch_EPollArrayWrapper_init(JNIEnv?
    *env,?jclass?this)?
    {
    ????epoll_create_func?
    =?(epoll_create_t)?dlsym(RTLD_DEFAULT,?"epoll_create");
    ????epoll_ctl_func????
    =?(epoll_ctl_t)????dlsym(RTLD_DEFAULT,?"epoll_ctl");
    ????epoll_wait_func???
    =?(epoll_wait_t)???dlsym(RTLD_DEFAULT,?"epoll_wait");
    ???????????????????????????????????????????????????????????????????????????????????????????????????
    ????
    if?((epoll_create_func?==?NULL)?||?(epoll_ctl_func?==?NULL)?||
    ????????(epoll_wait_func?
    ==?NULL))?{
    ????????JNU_ThrowInternalError(env,?
    "unable?to?get?address?of?epoll?functions,?pre-2.6?kernel?");
    ????}
    }


    具體程序的流程我還是不夠清楚,還有待進一步深入了解。
    posted on 2006-11-22 01:34 溫少的日志 閱讀(5529) 評論(2)  編輯  收藏
    Comments
    • # re: 關(guān)于sun JDK nio在linux下的實現(xiàn)。
      BeanSoft
      Posted @ 2006-11-22 11:04
      看來真正的高手還是要精通各個平臺下的標準C啊, 例如 JDK 的 N 多 BUG, 最后都得修改 C 代碼. 還好 SUN 明年開源 JDK, 這樣有實力的企業(yè)可以自己增強 JDK.  回復  更多評論   
    • # re: 關(guān)于sun JDK nio在linux下的實現(xiàn)。[未登錄]
      ken
      Posted @ 2008-01-01 02:35
      原來JKD1。6在LINUX下的NIO是實現(xiàn)自EPOLL的。。但是不知道怎么設(shè)置LT或ET模式?  回復  更多評論   

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
     
    主站蜘蛛池模板: 99re6热视频精品免费观看| 精品成人免费自拍视频| 希望影院高清免费观看视频| 久久久久亚洲Av片无码v| 爽爽爽爽爽爽爽成人免费观看 | 日韩视频免费在线观看| 久久亚洲国产视频| 99久久国产免费-99久久国产免费| 久久亚洲精精品中文字幕| 久久久久国产免费| 亚洲一级毛片免费在线观看| 四虎影视www四虎免费| 老司机午夜精品视频在线观看免费 | 亚洲国产一区视频| 成年网在线观看免费观看网址| 亚洲男人在线无码视频| 波多野结衣免费一区视频 | 亚洲日本人成中文字幕| 大学生一级特黄的免费大片视频| 春暖花开亚洲性无区一区二区 | 亚洲人成网站免费播放| 亚洲av无码专区在线观看下载| 免费成人在线观看| 国产无遮挡又黄又爽免费网站| 亚洲一级二级三级不卡| 韩国日本好看电影免费看| 大片免费观看92在线视频线视频 | 人人鲁免费播放视频人人香蕉| 亚洲av中文无码乱人伦在线播放 | 国产精品视频免费| 美国免费高清一级毛片| 久久精品国产亚洲综合色| 黄瓜视频影院在线观看免费| 免费一区二区无码视频在线播放| 亚洲αv久久久噜噜噜噜噜| 人妻视频一区二区三区免费| 国产va免费观看| 国产成人亚洲合集青青草原精品| 免费人妻av无码专区| 无码专区AAAAAA免费视频| 亚洲av色香蕉一区二区三区|