mirror of
https://gitee.com/IrisVega/frp.git
synced 2024-11-01 22:31:29 +08:00
utils/conn: fix a socket error in windows
This commit is contained in:
parent
04014bb78f
commit
2640c0b570
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
>frp 是一个高性能的反向代理应用,可以帮助你轻松的进行内网穿透,对外网提供服务,对于 http 服务还支持虚拟主机功能,访问80端口,可以根据域名路由到后端不同的 http 服务。
|
>frp 是一个高性能的反向代理应用,可以帮助你轻松的进行内网穿透,对外网提供服务,对于 http 服务还支持虚拟主机功能,访问80端口,可以根据域名路由到后端不同的 http 服务。
|
||||||
|
|
||||||
## frp 的作用?
|
## frp 的作用
|
||||||
|
|
||||||
* 利用处于内网或防火墙后的机器,对外网环境提供 http 服务。
|
* 利用处于内网或防火墙后的机器,对外网环境提供 http 服务。
|
||||||
* 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
|
* 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
|
||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
## 开发状态
|
## 开发状态
|
||||||
|
|
||||||
frp 目前正在前期开发阶段,master分支用于发布稳定版本,dev分支用于开发,您可以尝试下载最新的 release 版本进行测试。
|
frp 目前正在前期开发阶段,master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试。
|
||||||
|
|
||||||
**在 1.0 版本以前,交互协议都可能会被改变,不能保证向后兼容。**
|
**在 1.0 版本以前,交互协议都可能会被改变,不能保证向后兼容。**
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -129,11 +130,14 @@ func (c *Conn) GetLocalAddr() (addr string) {
|
|||||||
|
|
||||||
func (c *Conn) ReadLine() (buff string, err error) {
|
func (c *Conn) ReadLine() (buff string, err error) {
|
||||||
buff, err = c.Reader.ReadString('\n')
|
buff, err = c.Reader.ReadString('\n')
|
||||||
if err == io.EOF {
|
if err != nil {
|
||||||
|
// wsarecv error in windows means connection closed
|
||||||
|
if err == io.EOF || strings.Contains(err.Error(), "wsarecv: An existing connection was forcibly closed") {
|
||||||
c.mutex.Lock()
|
c.mutex.Lock()
|
||||||
c.closeFlag = true
|
c.closeFlag = true
|
||||||
c.mutex.Unlock()
|
c.mutex.Unlock()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return buff, err
|
return buff, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
"frp/utils/conn"
|
"frp/utils/conn"
|
||||||
)
|
)
|
||||||
@ -31,6 +32,9 @@ func main() {
|
|||||||
func echoWorker(c *conn.Conn) {
|
func echoWorker(c *conn.Conn) {
|
||||||
for {
|
for {
|
||||||
buff, err := c.ReadLine()
|
buff, err := c.ReadLine()
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("echo server read error: %v\n", err)
|
fmt.Printf("echo server read error: %v\n", err)
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user