代码拉取完成,页面将自动刷新
package backup
import (
"fmt"
"syscall"
"time"
)
func FD_SET(fd uintptr, p *syscall.FdSet) {
n, k := fd/32, fd%32
p.Bits[n] |= (1 << uint32(k))
}
func CheckoutTimeout(fd socket_t, deadline time.Time) error {
var err error
var to syscall.Timeval
var toptr *syscall.Timeval
var pw syscall.FdSet
FD_SET(uintptr(fd), &pw)
for {
// wait until the fd is ready to read or write.
if !deadline.IsZero() {
to = syscall.NsecToTimeval(deadline.Sub(time.Now()).Nanoseconds())
toptr = &to
}
// wait until the fd is ready to write. we can't use:
// if err := fd.pd.WaitWrite(); err != nil {
// return err
// }
// so we use select instead.
if _, err = Select(fd+1, nil, &pw, nil, toptr); err != nil {
fmt.Println(err)
return err
}
var nerr int
nerr, err = syscall.GetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_ERROR)
if err != nil {
return err
}
switch err = syscall.Errno(nerr); err {
case syscall.ETIMEDOUT:
return errTimeout
case syscall.EAGAIN:
continue
case syscall.Errno(0), syscall.EISCONN:
if !deadline.IsZero() && deadline.Before(time.Now()) {
return errTimeout
}
return nil
default:
return err
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。