问题列表 - 第32321页

13
推荐指数
3
解决办法
1万
查看次数

我该怎么做才能避免接收端的TCP Zero Window/TCP Window Full?

我有一个小应用程序,它通过网络将文件发送到位于Windows操作系统上的代理.

当此应用程序在Windows上运行时,一切正常,通信正常,文件全部复制成功.

但是,当这个应用程序在Linux上运行时(RedHat 5.3,接收器仍然是Windows) - 我在Wireshark中看到TCP Zero Window和TCP Window Full的网络跟踪消息每1-2秒出现一次.然后,代理会在几分钟后关闭连接.

Windows - Linux代码几乎相同,非常简单.唯一的非平凡操作是setsockopt,SO_SNDBUF和值0xFFFF.删除此代码没有帮助.

有人可以帮我解决这个问题吗?

编辑:添加发送代码 - 它看起来它正确处理部分写入:

int totalSent=0;
while(totalSent != dataLen)
{
    int bytesSent 
        = ::send(_socket,(char *)(data+totalSent), dataLen-totalSent, 0);

    if (bytesSent ==0) {
        return totalSent;
    }
    else if(bytesSent == SOCKET_ERROR){
#ifdef __WIN32
        int errcode = WSAGetLastError();
        if( errcode==WSAEWOULDBLOCK ){
#else
            if ((errno == EWOULDBLOCK) || (errno == EAGAIN)) {
#endif
            }
            else{
                if( !totalSent ) {
                    totalSent = SOCKET_ERROR;
                }
                break;
            }
        }
        else{
            totalSent+=bytesSent;
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++ network-programming tcp cross-platform

8
推荐指数
2
解决办法
2万
查看次数

加载共享库的两个实例

对于测试,我想从应用程序加载两个共享库实例.库中的代码提供了API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量.

我正在为这个lib编写单元测试,我想有两个实例,因为这会简化我的测试.

该库未链接到该程序.相反,我使用LoadLibrary/GetProcAddress(或Linux上的dlopen/dlsym)直接加载它.为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称...

以下是问题:

  • 是否可以加载这样的库两次?例如,库的所有已加载实例应该获得自己的数据段,并且不会相互影响.

  • 如果是这样:这对于Windows和Linux来说是否可移植?

c linux windows dll

13
推荐指数
1
解决办法
5993
查看次数

CURL PHP发送图像

从服务器获取图像是微不足道的,但我想到了不同的东西.这是一个疯狂的问题,但是...是否可以将文件(图像)发送到服务器但不使用表单上传或ftp连接?我想向例如发送请求.http://www.example.com/file.php包含二进制内容.我想我需要设置Content-type header image/jpeg但是如何在我的请求中添加一些内容?

php curl

18
推荐指数
3
解决办法
3万
查看次数

具有不可靠连接的"git"有多安全?

我正在使用git进行源代码控制,并将我的更改推送到Internet上的服务器上的存储库以便安全保存.

我可以在火车上的笔记本电脑上做一些少量的编码,它有一个无线互联网连接,但它不是那么可靠,偶尔会丢失或变得无法使用.我的问题是如果在"git push"期间我的连接丢失会发生什么?我最终会得到一个损坏或半更新的git存储库吗?如果是这样,恢复它有多难?

git

19
推荐指数
2
解决办法
2237
查看次数

Python时间延迟

我想知道如何在一段时间后调用一个函数.我试过time.sleep()但这会暂停整个脚本.我想让脚本继续进行,但是在???s之后调用一个函数并同时运行另一个脚本

python time

34
推荐指数
2
解决办法
3万
查看次数

使用 Linq 进行“惰性”GroupBy

我最近遇到的情况是,我需要执行一个分组操作,缓慢产生 Linq 查询。

现在,groupBy 失去了它的惰性,这意味着您必须等待整个序列完成,直到返回任何组。对我来说,从逻辑上讲这似乎不是最好的解决方案,因为一旦第一次遇到一个组就可以返回。

我编写了以下代码,它似乎工作得很好,并且正在寻找陷阱和一般改进,以及对概念本身的想法(例如,可以/应该 groupBy 方法尽快返回组)。

public static IEnumerable<KeyValuePair<R, IEnumerable<T>>> GroupByLazy<T, R>(this IEnumerable<T> source, Func<T, R> keySelector)
        {
            var dic = new Dictionary<R, BlockingCollection<T>>();
            foreach (var item in source)
            {
                var Key = keySelector(item);
                BlockingCollection<T> i;
                if (!dic.TryGetValue(Key, out i))
                {
                    i = new BlockingCollection<T>();
                    i.Add(item);
                    dic.Add(Key, i);
                    yield return new KeyValuePair<R, IEnumerable<T>>(Key, i);
                }
                else i.TryAdd(item);
            }
            // mark all the groups as completed so that enumerations of group-items can finish
            foreach (var groupedValues in dic.Values)
                groupedValues.CompleteAdding(); …
Run Code Online (Sandbox Code Playgroud)

c# linq

6
推荐指数
2
解决办法
2275
查看次数

整个程序集的静态构造函数

我的程序集中有很多入口点,我希望在运行此程序集中的任何其他代码之前,每个AppDomain执行一次初始化代码.最好的方法是什么?

我看到的一个解决方案是拥有一个带有静态构造函数的类,并继承我拥有的每个入口点.像这样的东西:

public class Initializer
{
    static Initializer()
    {
        EnsureInitialized();  // Calls initialization code once and only once
    }
}

public class EntryPointOne : Initializer, IEntryPoint
{
    // Some code here
}

public class EntryPointTwo : Initializer, IEntryPoint
{
    // Some code here
}

// etc.
Run Code Online (Sandbox Code Playgroud)

这让我可以避免在每个入口点编写样板静态构造函数,但是没有多继承,这并不总是可行的.你能想到其他更好的选择吗?

c# static assemblies initialization

11
推荐指数
1
解决办法
3234
查看次数

在R脚本中解析命令行参数

有没有方便的方法来自动解析传递给R脚本的命令行参数?

像perl这样的东西Getopt::Long

parsing r command-line-arguments

42
推荐指数
4
解决办法
3万
查看次数

Monad法律解释

对Haskell的温和介绍,有以下monad法则.任何人都可以直观地解释他们的意思吗?

return a >>= k             = k a
m >>= return               = m
xs >>= return . f          = fmap f xs
m >>= (\x -> k x >>= h)    = (m >>= k) >>= h
Run Code Online (Sandbox Code Playgroud)

这是我的尝试解释:

  1. 我们期望返回函数包装,a以便它的monadic性质是微不足道的.当我们将它绑定到一个函数时,没有monadic效果,它应该只传递a给函数.

  2. 将解包的输出m传递给return重新包装它.monadic性质保持不变.所以它和原来的monad一样.

  3. 将解包的值传递给f然后重新包装.monadic性质保持不变.这是我们将正常函数转换为monadic函数时所期望的行为.

  4. 我对这部法律没有解释.这确实说monad必须"几乎联想".

monads haskell

33
推荐指数
4
解决办法
6558
查看次数