⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sock_post.i

📁 fortran并行计算包
💻 I
📖 第 1 页 / 共 2 页
字号:
    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,					 "**sock|poll|bind", "**sock|poll|bind %d %d %s", *port, errno, MPIU_Strerror(errno));	goto fn_fail;    }    /* --END ERROR HANDLING-- */    /*     * Set and verify the socket buffer size     */    mpi_errno = MPIDU_Sock_SetSockBufferSize( fd, 1 );    if (mpi_errno) { MPIU_ERR_POP( mpi_errno ); }        /*     * Start listening for incoming connections...     */    rc = listen(fd, SOMAXCONN);    /* --BEGIN ERROR HANDLING-- */    if (rc == -1)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,					 "**sock|poll|listen", "**sock|poll|listen %d %s", errno, MPIU_Strerror(errno));	goto fn_fail;    }    /* --END ERROR HANDLING-- */    /*     * Get listener port.  Techincally we don't need to do this if a port was      * specified by the calling routine; but it adds an extra error check.     */    addr_len = sizeof(addr);    rc = getsockname(fd, (struct sockaddr *) &addr, &addr_len);    /* --BEGIN ERROR HANDLING-- */    if (rc == -1)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL,					 "**sock|getport", "**sock|poll|getport %d %s", errno, MPIU_Strerror(errno));	goto fn_fail;    }    /* --END ERROR HANDLING-- */    *port = (unsigned int) ntohs(addr.sin_port);    /*     * Allocate and initialize sock and poll structures.  If another thread is     * blocking in poll(), that thread must be woke up     * long enough to pick up the addition of the listener socket.     */    mpi_errno = MPIDU_Socki_sock_alloc(sock_set, &sock);    /* --BEGIN ERROR HANDLING-- */    if (mpi_errno != MPI_SUCCESS)    {	mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_NOMEM,					 "**sock|sockalloc", NULL);	goto fn_fail;    }    /* --END ERROR HANDLING-- */    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);        pollinfo->fd = fd;    pollinfo->user_ptr = user_ptr;    pollinfo->type = MPIDU_SOCKI_TYPE_LISTENER;    pollinfo->state = MPIDU_SOCKI_STATE_CONNECTED_RO;    MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);    *sockp = sock;  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_LISTEN);    return mpi_errno;    /* --BEGIN ERROR HANDLING-- */  fn_fail:    if (fd != -1)    { 	close(fd);    }    goto fn_exit;    /* --END ERROR HANDLING-- */}/* end MPIDU_Sock_listen() *//* FIXME: What does this function do? */#undef FUNCNAME#define FUNCNAME MPIDU_Sock_post_read#undef FCNAME#define FCNAME MPIU_QUOTE(FUNCNAME)int MPIDU_Sock_post_read(struct MPIDU_Sock * sock, void * buf, MPIU_Size_t minlen, MPIU_Size_t maxlen,			 MPIDU_Sock_progress_update_func_t fn){    struct pollfd * pollfd;    struct pollinfo * pollinfo;    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READ);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READ);    MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);    MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);    MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);    /* --BEGIN ERROR HANDLING-- */    if (minlen < 1 || minlen > maxlen)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,					 "**sock|badlen", "**sock|badlen %d %d %d %d",					 pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    pollinfo->read.buf.ptr = buf;    pollinfo->read.buf.min = minlen;    pollinfo->read.buf.max = maxlen;    pollinfo->read_iov_flag = FALSE;    pollinfo->read_nb = 0;    pollinfo->read_progress_update_fn = fn;        MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READ);    return mpi_errno;}/* end MPIDU_Sock_post_read() */#undef FUNCNAME#define FUNCNAME MPIDU_Sock_post_readv#undef FCNAME#define FCNAME MPIU_QUOTE(FUNCNAME)int MPIDU_Sock_post_readv(struct MPIDU_Sock * sock, MPID_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn){    struct pollfd * pollfd;    struct pollinfo * pollinfo;    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_READV);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_READV);    MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);    MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);    MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_CONNECTED_READABLE(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_NO_POSTED_READ(pollfd, pollinfo, mpi_errno, fn_exit);    /* --BEGIN ERROR HANDLING-- */    if (iov_n < 1 || iov_n > MPID_IOV_LIMIT)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,					 "**sock|badiovn", "**sock|badiovn %d %d %d",					 pollinfo->sock_set->id, pollinfo->sock_id, iov_n);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    pollinfo->read.iov.ptr = iov;    pollinfo->read.iov.count = iov_n;    pollinfo->read.iov.offset = 0;    pollinfo->read_iov_flag = TRUE;    pollinfo->read_nb = 0;    pollinfo->read_progress_update_fn = fn;    MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLIN);  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_READV);    return mpi_errno;}/* end MPIDU_Sock_post_readv() */#undef FUNCNAME#define FUNCNAME MPIDU_Sock_post_write#undef FCNAME#define FCNAME MPIU_QUOTE(FUNCNAME)int MPIDU_Sock_post_write(struct MPIDU_Sock * sock, void * buf, MPIU_Size_t minlen, MPIU_Size_t maxlen,			  MPIDU_Sock_progress_update_func_t fn){    struct pollfd * pollfd;    struct pollinfo * pollinfo;    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITE);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITE);        MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);    MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);    MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);    /* --BEGIN ERROR HANDLING-- */    if (minlen < 1 || minlen > maxlen)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,					 "**sock|badlen", "**sock|badlen %d %d %d %d",					 pollinfo->sock_set->id, pollinfo->sock_id, minlen, maxlen);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    pollinfo->write.buf.ptr = buf;    pollinfo->write.buf.min = minlen;    pollinfo->write.buf.max = maxlen;    pollinfo->write_iov_flag = FALSE;    pollinfo->write_nb = 0;    pollinfo->write_progress_update_fn = fn;    MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITE);    return mpi_errno;}/* end MPIDU_Sock_post_write() */#undef FUNCNAME#define FUNCNAME MPIDU_Sock_post_writev#undef FCNAME#define FCNAME MPIU_QUOTE(FUNCNAME)int MPIDU_Sock_post_writev(struct MPIDU_Sock * sock, MPID_IOV * iov, int iov_n, MPIDU_Sock_progress_update_func_t fn){    struct pollfd * pollfd;    struct pollinfo * pollinfo;    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_WRITEV);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_WRITEV);        MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);    MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);    MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_CONNECTED_WRITABLE(pollinfo, mpi_errno, fn_exit);    MPIDU_SOCKI_VERIFY_NO_POSTED_WRITE(pollfd, pollinfo, mpi_errno, fn_exit);    /* --BEGIN ERROR HANDLING-- */    if (iov_n < 1 || iov_n > MPID_IOV_LIMIT)    {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_LEN,					 "**sock|badiovn", "**sock|badiovn %d %d %d",					 pollinfo->sock_set->id, pollinfo->sock_id, iov_n);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    pollinfo->write.iov.ptr = iov;    pollinfo->write.iov.count = iov_n;    pollinfo->write.iov.offset = 0;    pollinfo->write_iov_flag = TRUE;    pollinfo->write_nb = 0;    pollinfo->write_progress_update_fn = fn;    MPIDU_SOCKI_POLLFD_OP_SET(pollfd, pollinfo, POLLOUT);  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_WRITEV);    return mpi_errno;}/* end MPIDU_Sock_post_writev() */#undef FUNCNAME#define FUNCNAME MPIDU_Sock_post_close#undef FCNAME#define FCNAME MPIU_QUOTE(FUNCNAME)int MPIDU_Sock_post_close(struct MPIDU_Sock * sock){    struct pollfd * pollfd;    struct pollinfo * pollinfo;        int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDU_SOCK_POST_CLOSE);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDU_SOCK_POST_CLOSE);    MPIDU_SOCKI_VERIFY_INIT(mpi_errno, fn_exit);    MPIDU_SOCKI_VALIDATE_SOCK(sock, mpi_errno, fn_exit);    pollfd = MPIDU_Socki_sock_get_pollfd(sock);    pollinfo = MPIDU_Socki_sock_get_pollinfo(sock);    MPIDU_SOCKI_VALIDATE_FD(pollinfo, mpi_errno, fn_exit);    /* --BEGIN ERROR HANDLING-- */    if (pollinfo->state == MPIDU_SOCKI_STATE_CLOSING)    {	mpi_errno = MPIR_Err_create_code(	    mpi_errno, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_BAD_SOCK, "**sock|closing_already",	    "**sock|closing_already %d %d", pollinfo->sock_set->id, pollinfo->sock_id);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    if (pollinfo->type == MPIDU_SOCKI_TYPE_COMMUNICATION)    {	if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN | POLLOUT))	{	    /* --BEGIN ERROR HANDLING-- */	    int event_mpi_errno;	    	    event_mpi_errno = MPIR_Err_create_code(		MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_SOCK_CLOSED, "**sock|close_cancel",		"**sock|close_cancel %d %d", pollinfo->sock_set->id, pollinfo->sock_id);	    	    if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLIN))	    {		MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_READ, pollinfo->read_nb, pollinfo->user_ptr,					  MPI_SUCCESS, mpi_errno, fn_exit);	    }	    if (MPIDU_SOCKI_POLLFD_OP_ISSET(pollfd, pollinfo, POLLOUT))	    {		MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_WRITE, pollinfo->write_nb, pollinfo->user_ptr,					  MPI_SUCCESS, mpi_errno, fn_exit);	    }		    MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN | POLLOUT);	    /* --END ERROR HANDLING-- */	}    }    else /* if (pollinfo->type == MPIDU_SOCKI_TYPE_LISTENER) */    {	/*	 * The event queue may contain an accept event which means that 	 * MPIDU_Sock_accept() may be legally called after	 * MPIDU_Sock_post_close().  However, MPIDU_Sock_accept() must be 	 * called before the close event is return by	 * MPIDU_Sock_wait().	 */	MPIDU_SOCKI_POLLFD_OP_CLEAR(pollfd, pollinfo, POLLIN);    }        MPIDU_SOCKI_EVENT_ENQUEUE(pollinfo, MPIDU_SOCK_OP_CLOSE, 0, pollinfo->user_ptr, MPI_SUCCESS, mpi_errno, fn_exit);    pollinfo->state = MPIDU_SOCKI_STATE_CLOSING;  fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDU_SOCK_POST_CLOSE);    return mpi_errno;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -