<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: 關于sun JDK nio在linux下的實現。
      BeanSoft
      Posted @ 2006-11-22 11:04
      看來真正的高手還是要精通各個平臺下的標準C啊, 例如 JDK 的 N 多 BUG, 最后都得修改 C 代碼. 還好 SUN 明年開源 JDK, 這樣有實力的企業可以自己增強 JDK.  回復  更多評論   
    • # re: 關于sun JDK nio在linux下的實現。[未登錄]
      ken
      Posted @ 2008-01-01 02:35
      原來JKD1。6在LINUX下的NIO是實現自EPOLL的。。但是不知道怎么設置LT或ET模式?  回復  更多評論   

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


    網站導航:
     
     
    主站蜘蛛池模板: 久久免费福利视频| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲精品国产啊女成拍色拍| a级毛片免费在线观看| 亚洲中文字幕在线观看| 丰满人妻一区二区三区免费视频| 亚洲女同成人AⅤ人片在线观看| 猫咪免费人成网站在线观看入口| 国产v片免费播放| 男男gay做爽爽免费视频| 亚洲欧洲日产国码高潮αv| 免费福利在线观看| 亚洲成av人片一区二区三区| 免费精品国自产拍在线播放| 在线精品亚洲一区二区三区| 久久免费动漫品精老司机| 亚洲精品在线免费看| 毛片a级毛片免费播放100| 国产亚洲一卡2卡3卡4卡新区| 亚洲不卡AV影片在线播放| 国产99久久久国产精免费| 亚洲AV午夜成人片| 青青在线久青草免费观看| 久久亚洲精品11p| 国产亚洲精品高清在线| 免费A级毛片av无码| 亚洲精品精华液一区二区| 久久久久久亚洲精品不卡| 无码午夜成人1000部免费视频| 亚洲免费在线视频观看| 国产一区二区三区在线免费| 野花香高清视频在线观看免费 | 亚洲国产成人VA在线观看 | 成人免费a级毛片| 免费精品久久久久久中文字幕| 亚洲AV永久纯肉无码精品动漫| 免费大片黄在线观看yw| 免费的黄色的网站| 亚洲午夜电影在线观看高清 | 成人无码区免费A片视频WWW| 老司机免费午夜精品视频|